zoukankan      html  css  js  c++  java
  • 四则运算3

    一.程序设计思想

    1.还是在主函数中设置一些变量,来控制功能的实现。定义两个方法operationInt与operationComp,分别实现简单运算与混合运算。

    2.在operationInt函数中,先定义四个数组,分别储存计算式的第一个数字、符号转化中间变量,符号和第二个数字。然后随机产生变量,在此过程中,需要先判断是否有乘除法,最后将产生的随机数储存在数组中。在随机生成后,开始依次判断,设置变量T,当有一方不满足题意,改变T的值,从而使这组随机数重新生成。然后判断除法是否有余数,所有计算式是否有重复,在判断计算式是否有重复时,需要考虑到加法与乘法的特殊性。接下来就是打印,利用循环,在输出算式后,要做一个计算算式结果的过程,判断符号然后对第一和第二个数做处理就行了,然后判断客户输入是否和正确结果相同,相同时,变量R递加,最后输出R,即为正确个数;

    3.在operationComp函数中,要实现混合运算,先定义两个数组,一个储存混合运算的数字,一个储存混合运算的字符,然后输出时,一个数字,一个字符的输出,这样就构成了一个混合运算式。在随机对两数组赋值时,要考虑到除号后边的数字不能为0,切除号前后数字相除后不能有余。计算时,先要依次判断是否有乘除号,有的话先计算乘除号前后的数字,然后将结果赋值给符号后的数字,赋值符号前的数字为0,两个数字之间的符号赋给前一个符号,最后只剩下加减法时,还是按章刚才的原理以此计算将结果赋给后一个数,最后结果即为数组最后一个,同理判断客户输入是否和正确结果相同,相同时,变量R递加,最后输出R,即为正确个数。

    二。程序源代码

      1 //
      2 //信1405-1班20142973魏垚
      3 //四则运算03
      4 
      5 import java.util.Scanner;
      6 
      7 public class Four_Operation_03 {
      8     
      9     static Scanner in=new Scanner(System.in);
     10     
     11     public static void main(String[] args) {
     12         // TODO Auto-generated method stub
     13         
     14         System.out.print("请选择:
    1.混合运算;
    2.简单运算。
    ");
     15         int k=in.nextInt();
     16         System.out.print("请选择:
    计算范围:
    ");
     17         int numF=in.nextInt();                             //numF:计算范围
     18         System.out.print("2.请选择是否有乘除法:
    ");
     19         System.out.print("(1):是            (2):否
    ");
     20         int ccYN=in.nextInt();                             //ccYN:是否有乘除法                
     21         if(k==1)
     22         {
     23             operationComp(numF,ccYN);
     24         }
     25         else if(k==2)
     26         {
     27             operationInt(numF,ccYN);
     28         }
     29     }
     30     
     31     //简单运算
     32     public static void operationInt(int a1,int a2)
     33     {                               //计算范围   乘除法   负数
     34         int a4=5;//打印数量
     35         int fir[]=new int[a4];//第一个数
     36         int mid[]=new int[a4]; //符号转化的中间变量
     37         char fh[]=new char[a4];//符号
     38         int sec[]=new int[a4];//第二个数
     39         
     40         int T;//控制重新生成随机数的变量
     41 
     42         for(int i=0;i<a4;i++)
     43         {
     44             T=0;
     45             
     46             //随机产生
     47             fir[i]=(int)(Math.random()*a1);
     48             mid[i]=(int)(Math.random()*a1);
     49             if(a2==2)
     50             {
     51                 mid[i]=mid[i]%2;
     52                 if(mid[i]==0)fh[i]='+';
     53                 if(mid[i]==1)fh[i]='-';
     54             }
     55             if(a2==1)
     56             {
     57                 mid[i]=mid[i]%4;
     58                 if(mid[i]==0)fh[i]='+';
     59                 if(mid[i]==1)fh[i]='-';
     60                 if(mid[i]==2)fh[i]='*';
     61                 if(mid[i]==3)fh[i]='/';
     62             }
     63             sec[i]=(int)(Math.random()*a1);
     64             if(fh[i]=='/')
     65             {
     66                 while(sec[i]==0)
     67                 {
     68                     sec[i]=(int)(Math.random()*a1);
     69                 }
     70                 if(fir[i]%sec[i]!=0)
     71                 {
     72                     T=1;
     73                 }
     74             }
     75             
     76             //是否重复
     77             for(int j=i-1;j>=0;j--)
     78             {
     79                 if(fh[i]==fh[j])
     80                 {
     81                     //判断数字有无相同
     82                     if(fir[i]==fir[j]&&sec[i]==sec[j])
     83                         T=1;
     84                     //加法与乘法前后数字也不能都相同
     85                     if(fh[i]=='+'||fh[i]=='/')
     86                     {
     87                         if(fir[i]==sec[j]&&sec[i]==fir[j])
     88                             T=1;
     89                     }    
     90                 }
     91             }
     92             if(T==1)i--;
     93         }
     94         
     95         //打印
     96         int R=0;
     97         for(int m=0;m<a4;m++)
     98         {
     99             System.out.print(fir[m]);
    100             System.out.print(fh[m]);
    101             System.out.print(sec[m]);
    102             System.out.print("=");
    103             int r1=in.nextInt();
    104             int r2=0;
    105             
    106             if(fh[m]=='+')
    107             {
    108                 r2=fir[m]+sec[m];
    109             }
    110             if(fh[m]=='-')
    111             {
    112                 r2=fir[m]-sec[m];
    113             }
    114             if(fh[m]=='*')
    115             {
    116                 r2=fir[m]*sec[m];
    117             }
    118             if(fh[m]=='/')
    119             {
    120                 r2=fir[m]/sec[m];
    121             }
    122             if(r1==r2)
    123                 R++;        
    124         }
    125         System.out.print("正确题目个数:"+R);
    126     }
    127     
    128     //混合运算
    129     public static void operationComp(int b1,int b2)
    130     {                               //计算范围   乘除法   负数
    131 //        int b4=5;//打印数量
    132         int num[]=new int[5];       //混合运算的数字部分
    133         char fuh[]=new char[4];     //混合运算的符号部分
    134         int mid1;                   //符号中间转换变量
    135         System.out.print("请输入混合运算复杂度:
    ");
    136         int numope=in.nextInt();
    137         int R=0;//统计计算正确题目个数
    138         for(int k=0;k<5;k++)
    139         {
    140             for(int j=0;j<4;j++)
    141             {
    142                 mid1=(int)(Math.random()*100);
    143                 if(b2==1)                        //有无乘除法
    144                 {
    145                     if(mid1%4==0)
    146                         fuh[j]='+';
    147                     if(mid1%4==1)
    148                         fuh[j]='-';
    149                     if(mid1%4==2)
    150                         fuh[j]='*';
    151                     if(mid1%4==3)
    152                         fuh[j]='/';
    153                 }
    154                 if(b2==2)
    155                 {
    156                     if(mid1%2==0)
    157                         fuh[j]='+';
    158                     if(mid1%2==1)
    159                         fuh[j]='-';
    160                 }
    161             }
    162             for(int i=0;i<5;i++)
    163             {
    164                 num[i]=(int)(Math.random()*b1);
    165                 if(i>0)
    166                 {
    167                     if(fuh[i-1]=='/')
    168                     {
    169                         while(num[i]==0)
    170                         {
    171                             num[i]=(int)(Math.random()*b1);//除号后不能有0
    172                         }
    173                         if(num[i-1]%num[i]!=0)
    174                         {
    175                             i=i-2;
    176                         }
    177                     }
    178                 }
    179             }
    180             
    181             //打印
    182             int N=0;
    183             for(int n=0;n<numope-1;n++)
    184             {
    185                 System.out.print(num[n]);
    186                 System.out.print(fuh[n]);                
    187                 N++;
    188             }
    189             System.out.print(num[N]);
    190             System.out.print("=
    ");
    191             
    192             //计算        
    193             for(int js=0;js<numope-1;js++)
    194             {
    195                 if(fuh[js]=='*'||fuh[js]=='/')
    196                 {
    197                     if(fuh[js]=='*')
    198                         num[js+1]=num[js]*num[js+1];
    199                     if(fuh[js]=='/')
    200                         num[js+1]=num[js]/num[js+1];
    201                     num[js]=0;
    202                     if(js>0)
    203                         fuh[js]=fuh[js-1];
    204                     if(js==0)
    205                         fuh[js]='+';
    206 
    207                 }
    208             }
    209             
    210             for(int js1=0;js1<numope-1;js1++)
    211             {
    212                 if(fuh[js1]=='+')
    213                     num[js1+1]=num[js1]+num[js1+1];
    214                 if(fuh[js1]=='-')
    215                     num[js1+1]=num[js1]-num[js1+1];
    216             }
    217 
    218             int innum=in.nextInt();
    219             if(innum==num[numope-1])
    220                 R++;
    221         }
    222         System.out.print("正确题目个数:"+R);    
    223     }
    224 }

    三。程序运行截图

    四.问题

    程序没有实现括号。

    五.时间记录日志

    日期 开始时间 结束时间 中断时间(min) 净时间(min) 活动 备注
    3.21 8.00 9.50 10 100 上课  
      3.30 4.30 5 55 简单构思,初步完成简单运算的框架  
    3.23 2.30 3.35 20 35 解决简单运算部分的计算问题  
      8.00 8.30 10 20 优化下午的代码部分  
    3.26 9.30 11.00 30 60 解决混合运算产生的问题,构思怎样计算混合运算  
      4.00 7.00 30 150 优化上午的代码,着重解决计算混合运算的问题  
                 

    六.缺陷记录日志

    日期 编号 引入阶段 排除阶段 修复时间 修复缺陷
    3.23 1 编码 编译 10  
      描述:变量R在循环结构中的位置一直出错,导致编译时结果不符合设想
    3.26 2. 编码 编译 2  
      描述:在书写混合运算部分时,因为多个循环结构及if语句的嵌套,导致代码结尾的括号总是出现错误
      3. 编码 编译 5  
      描述:由于混合计算的部分整数数组与符号数组的区间不同,赋值及输出时都要考虑循环越界问题
      4. 编码 编译 30  
      描述:在一开始的混合运算计算结果的构思中,总是出现循环出不去,导致死循环,后来更改思路,重新编码
               
  • 相关阅读:
    android开发聊天输入框at某人的分隔符选取
    使用curl下载小文件的方法记录一下
    google play store注意事项
    android开发使用setOnClickListener点击事件实现双击事件的解决方法
    mac下Android Studio配置文件的路径记录一下
    android studio更新到3.6以上后布局文件不能切换到xml编辑器?那就点进来吧
    mac上使用Xcode编译调试LearnOpenGL源代码的方法
    android开发fragment里面使用百度地图黑屏错位的解决方法
    es7之修饰器
    解决 bash: vue command not found
  • 原文地址:https://www.cnblogs.com/weiyao/p/5323823.html
Copyright © 2011-2022 走看看