软件工程概论个人作业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 }
复制代码

原文地址:https://www.cnblogs.com/CkmIT/p/6694854.html