软件工程概论个人作业03
设计思路
1、输入:输入选择;
2、选择内容:选择出2位数的题还是多位数的题还是退出程序
选择1是否有乘除法(运算符0-1或0-3);
选择5加减有无负数;
选择6除法有无余数;
选择7是选择数量或打印方式。
3是数值范围的前域
4是数值范围的后域
3、加工:2位数的题设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
计算则按照顺序计算即可
多位数的题:
设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
有无括号:用随机数来进行选择在原来式子之前还是之后进行添加
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
带括号的计算是直接从最里层括号开始往外依次计算
不带括号的计算则分为没有乘除法和有乘除法
没有乘除法的是将运算式存为二维数组,将数值和运算符依次分别存放于两个数组中,然后按从左到右的顺序进行计算
有乘除法的则需进一步统计,在哪有除法或者乘法,然后先进行这两个运算。
4、输出:2位数运算,显示运算式以及用户输入的结果,还有系统判断的结果
最后,则是系统统计用户的做题情况
多位数运算则是显示运算式以及系统产生的结果
1 import java.util.Random;
2 import java.util.Scanner;
3
4 import javax.swing.JOptionPane;
5
6 //4:00
7 public class Arithmetic {
8
9 public static void main(String[] args) {
10 // TODO 自动生成的方法存根
11 int c;//选择
12 int c1,c4,c5,c6,c7,c8;
13 int a,b,d1;//二位数运算
14 int c2,c3;
15 int e=0;//运算符
16 String s="";
17 double d=0.0;//2位数的结果,用户
18 double f=0.0,g=0.0;//2位数结果,系统,多位数结果,系统
19 int flag=0;//判断是否输出
20 int m=0;//题数
21 Random rand = new Random();
22 for(int i=0;i<100000000;i++)
23 {
24 System.out.println("请输入选择:1、2位数运算 2、多位数运算 3、退出");
25 Scanner input=new Scanner(System.in) ;
26 c=input.nextInt();
27 if(c==1)
28 {
29 System.out.println("请输入选择:1 、有乘除法 2、无乘除法");
30 Scanner input1=new Scanner(System.in) ;
31 c1=input1.nextInt();
32 System.out.println("请输入数值范围的前域 ");
33 Scanner input2=new Scanner(System.in) ;
34 c2=input2.nextInt();
35 System.out.println("请输入数值范围的后域");
36 Scanner input3=new Scanner(System.in) ;
37 c3=input3.nextInt();
38 System.out.println("请输入选择:1、加减有负数 2、加减无负数");
39 Scanner input4=new Scanner(System.in) ;
40 c4=input4.nextInt();
41 System.out.println("请输入选择:1、除法有余数 2、除法无余数");
42 Scanner input5=new Scanner(System.in) ;
43 c5=input5.nextInt();
44 System.out.println("请输入出题数量");
45 Scanner input6=new Scanner(System.in) ;
46 c6=input6.nextInt();
47 System.out.println("请输入在一行中输出几列运算式?");
48 Scanner input7=new Scanner(System.in) ;
49 c7=input7.nextInt();
50 String []Repeat=new String[2*c6];
51 for(int w=0;w<c6;w++)
52 {
53 int w1;
54 w1=w;
55 //有无乘除法
56 if(c1==1)
57 {
58 e=rand.nextInt(4);
59 }
60 if(c1==2)
61 {
62 e=rand.nextInt(2);
63 }
64 //数值范围
65 a=rand.nextInt(c3)%(c3-c2+1)+c2;
66 b=rand.nextInt(c3)%(c3-c2+1)+c2;
67 //加减有无负数
68 if(c4==1)//有负数
69 {
70 flag=0;
71 }
72 if(c4==2)
73 {
74 if(e==0)
75 {
76 if((a+b)>=0)
77 {
78 flag=0;
79 }
80 else
81 {
82 flag=1;
83 }
84 }
85 if(e==1)
86 {
87 if((a-b)>=0)
88 {
89 flag=0;
90 }
91 else
92 {
93 flag=1;
94 }
95 }
96 }
97 //符号
98 if(e==0)
99 {
100 s="+";
101 f=a+b;
102 }
103 if(e==1)
104 {
105 s="-";
106 f=a-b;
107 }
108 if(e==2)
109 {
110 s="*";
111 f=a*b;
112 }
113 if(e==3)
114 {
115 if(b!=0)
116 {
117 if(c5==1)
118 {
119 s="/";
120 f=a/b;
121 }
122 if(c5==2)
123 {
124 if(a%b==0)
125 {
126 s="/";
127 f=a/b;
128 }
129 if(a%b!=0)
130 {
131 flag=1;
132 }
133 }
134
135 }
136 }
137 //判断重复
138 if(a<0.0&&b>=0.0)
139 {
140 Repeat[w]="("+a+")"+s+b;
141 }
142 if(a>=0.0&&b<0.0)
143 {
144 Repeat[w]=a+s+"("+b+")";
145 }
146 if(a<0.0&&b<0.0)
147 {
148 Repeat[w]="("+a+")"+s+"("+b+")";
149 }
150 if(a>=0.0&&b>=0.0)
151 {
152 Repeat[w]=a+s+b;
153 }
154 for(int w2=0;w2<w1;w2++)
155 {
156 if(Repeat[w].equals(Repeat[w2]))
157 {
158 flag =1;
159 }
160 else
161 {flag =0;}
162 }
163 //打印
164 if(flag==0)
165 {
166 if((w+1)%c7==0)
167 {
168 for(int k=0;k<10000000;k++)
169 {
170 String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果");
171 if(inputx!=null&&!inputx.equals(""))
172 {
173 d=Double.parseDouble(inputx);
174 break;
175 }
176 }
177 if(d==f)
178 {
179 System.out.println(Repeat[w]+"="+d+"正确");
180 m++;
181 }
182 if(d!=f)
183 {
184 System.out.println(Repeat[w]+"="+d+"不正确");
185 }
186 }
187 else
188 {
189
190 for(int k=0;k<10000000;k++)
191 {
192 String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果");
193 if(inputx!=null&&!inputx.equals(""))
194 {
195 d=Double.parseDouble(inputx);
196 break;
197 }
198 }
199 if(d==f)
200 {
201 System.out.print(Repeat[w]+"="+d+"正确");
202 m++;
203 }
204 if(d!=f)
205 {
206 System.out.print(Repeat[w]+"="+d+"不正确");
207 }
208 }
209 }
210 if(flag==1)
211 {
212 c6++;
213 }
214
215 }
216 System.out.println("共"+c6+"道题"+" "+m+"道题正确");
217 }
218 if(c==2)
219 {
220
221 System.out.println("请输入选择:1 、有乘除法 2、无乘除法");
222 Scanner input1=new Scanner(System.in) ;
223 c1=input1.nextInt();
224 System.out.println("请输入数值范围的前域 ");
225 Scanner input2=new Scanner(System.in) ;
226 c2=input2.nextInt();
227 System.out.println("请输入数值范围的后域");
228 Scanner input3=new Scanner(System.in) ;
229 c3=input3.nextInt();
230 /* System.out.println("请输入选择:1、加减有负数 2、加减无负数");
231 Scanner input4=new Scanner(System.in) ;
232 c4=input4.nextInt();
233 System.out.println("请输入选择:1、除法有余数 2、除法无余数");
234 Scanner input5=new Scanner(System.in) ;
235 c5=input5.nextInt();*/
236 System.out.println("请输入出题数量");
237 Scanner input6=new Scanner(System.in) ;
238 c6=input6.nextInt();
239 System.out.println("请输入在一行中输出几列运算式?");
240 Scanner input7=new Scanner(System.in) ;
241 c7=input7.nextInt();
242 System.out.println("请输入选择: 1、有括号 2、无括号");
243 Scanner input8=new Scanner(System.in) ;
244 c8=input8.nextInt();
245 //有无乘除法
246 if(c1==1)
247 {
248 e=rand.nextInt(4);
249 }
250 if(c1==2)
251 {
252 e=rand.nextInt(2);
253 }
254 //数值范围
255 a=rand.nextInt(c3)%(c3-c2+1)+c2;
256 b=rand.nextInt(c3)%(c3-c2+1)+c2;
257 String []Repeat=new String[2*c6];
258 if(e==0)
259 {
260 s="+";
261 g=a+b;
262 }
263 if(e==1)
264 {
265 s="-";
266 g=a-b;
267 }
268 if(e==2)
269 {
270 s="*";
271 g=a*b;
272 }
273 if(e==3)
274 {
275 if(b==0)
276 {
277 flag=1;
278 }
279 if(b!=0)
280 {
281 flag=0;
282 s="/";
283 g=a/b;
284 }
285 }
286 //出题数量
287 for(int w=0;w<c6;w++)
288 {
289 int p;//0为在原来基础上前面加数,1则是在后面加数
290 int ws;//几位数的运算
291 ws=rand.nextInt(8);
292 Repeat[w]=a+s+b;
293 if(c8==1)//有括号
294 {
295
296 for(int w1=0;w1<ws;w1++)
297 {
298 d1=rand.nextInt(c3)%(c3-c2+1)+c2;
299 p=rand.nextInt(2);
300 if(c1==1)
301 {
302 e=rand.nextInt(4);
303 }
304 if(c1==2)
305 {
306 e=rand.nextInt(2);
307 }
308 if(e==0)
309 {
310 s="+";
311 g=d1+g;
312 }
313 if(e==1)
314 {
315 s="-";
316 if(p==0)
317 {
318 g=d1-g;
319 }
320 if(p==1)
321 {
322 g=g-d1;
323 }
324 }
325 if(e==2)
326 {
327 s="*";
328 g=d1*g;
329 }
330 if(e==3)
331 {
332 if(b==0||g==0)
333 {
334 flag=1;
335 }
336 if(b!=0&&g!=0)
337 {
338 flag=0;
339 s="/";
340 if(p==0)
341 {
342 g=d1/g;
343 }
344 if(p==1)
345 {
346 g=g/d1;
347 }
348 }
349 }
350 if(p==0)
351 {
352 Repeat[w]=d1+s+"("+Repeat[w]+")";
353 }
354 if(p==1)
355 {
356 Repeat[w]="("+Repeat[w]+")"+s+d1;
357 }
358 }
359 }
360 if(c8==2)//无括号
361 {
362 int length=0;
363
364 String [][]Repeat1=new String[2*c6][100];
365 Repeat1[w][0]=""+a;
366 Repeat1[w][1]=s;
367 Repeat1[w][2]=""+b;
368 for(int w1=0;w1<ws;w1++)
369 {
370
371 d1=rand.nextInt(c3)%(c3-c2+1)+c2;
372 p=rand.nextInt(2);
373 if(c1==1)
374 {
375 e=rand.nextInt(4);
376 }
377 if(c1==2)
378 {
379 e=rand.nextInt(2);
380 }
381 if(e==0)
382 {
383 s="+";
384
385 }
386 if(e==1)
387 {
388 s="-";
389
390 }
391 if(e==2)
392 {
393 s="*";
394
395 }
396 if(e==3)
397 {
398 if(b==0)
399 {
400 flag=1;
401 }
402 if(b!=0)
403 {
404 flag=0;
405 s="/";
406
407 }
408 }
409
410 if(p==0)
411 {
412 int sl=0;//实际长度
413 Repeat[w]=d1+s+Repeat[w];
414 length=Repeat1[w].length;
415 for(int xx=0;xx<length;xx++)
416 {
417 String ss="";
418 ss=Repeat1[w][xx];
419 if(ss!=null&&!ss.equals(""))
420 {
421 sl++;
422 }
423 else
424 {
425 break;
426 }
427 }
428
429 for(int l=0;l<sl;l++)
430 {
431 Repeat1[w][l+2]=Repeat1[w][l];
432 }
433 Repeat1[w][0]=""+d1;
434 Repeat1[w][1]=s;
435 }
436 if(p==1)
437 {
438 int sl=0;
439 Repeat[w]=Repeat[w]+s+d1;
440 length=Repeat1[w].length;
441 for(int xx=0;xx<length;xx++)
442 {
443 String ss="";
444 ss=Repeat1[w][xx];
445 if(ss!=null&&!ss.equals(""))
446 {
447 sl++;
448 }
449 else
450 {
451 break;
452 }
453 }
454 Repeat1[w][sl]=s;
455 Repeat1[w][sl+1]=""+d1;
456 }
457 }
458 //计算结果
459 int []ns=new int[10];
460 int []nf=new int[9];
461 int ll=(Repeat1[w].length);
462 int sl=0;
463 for(int xx=0;xx<ll;xx++)
464 {
465 String ss="";
466 ss=Repeat1[w][xx];
467 if(ss!=null&&!ss.equals(""))
468 {
469 sl++;
470 }
471 else
472 {
473 break;
474 }
475 }
476 for(int l1=0;l1<sl;l1++)
477 {
478 if(l1%2==0)
479 {
480 ns[l1/2]=Integer.parseInt(Repeat1[w][l1]);
481 }
482 if(l1%2!=0)
483 {
484
485 nf[l1/2]=Repeat1[w][l1].charAt(0);
486 }
487 }
488
489 if(c1==1)
490 {
491
492 }
493 if(c1==2)
494 {
495 g=ns[0];
496 for(int l2=1;l2<(sl/2+1);l2++)
497 {
498 if(nf[l2-1]==43)
499 {
500 g=g+ns[l2];
501 }
502 if(nf[l2-1]==45)
503 {
504 g=g-ns[l2];
505 }
506 }
507 }
508 }
509
510
511
512 //判断重复
513 int w3=w;
514 for(int w2=0;w2<w3;w2++)
515 {
516 if(Repeat[w].equals(Repeat[w2]))
517 {
518 flag =1;
519 }
520 else
521 {flag =0;}
522 }
523 //打印
524 if(flag==1)
525 {
526 c6++;
527 }
528 if(flag==0)
529 {
530 if((w+1)%c7==0)
531 {
532 System.out.println(Repeat[w]+"="+g+" ");
533 }
534 else
535 {
536 System.out.print(Repeat[w]+"="+g+" ");
537 }
538 }
539 }
540 }
541 if(c==3)
542 {
543 break;
544 }
545
546 }
547 }
548
549 }







浙公网安备 33010602011771号