四则运算2

Posted on 2016-03-19 18:14  Young丶  阅读(211)  评论(0编辑  收藏  举报

一.程序设计思想

1.主函数中设置变量,和程序开始时输出的内容。定义一个BuildOperation函数来实现功能;

2.BuildOperation函数中,首先定义四个数组,分别储存计算式的第一个数字、符号转化中间变量,符号和第二个数字;

3.然后随机产生变量,在此过程中,需要先判断是否有乘除法,最后将产生的随机数储存在数组中;

4.在随机生成后,开始依次判断,设置变量T,当有一方不满足题意,改变T的值,从而使这组随机数重新生成;

5.依次判断加减法是否有负数,除法是否有余数,所有计算式是否有重复,在判断计算式是否有重复时,需要考虑到加法与乘法的特殊性;

6.根据打印数量将产生的所有符合要求的式子打印出来。

二、程序源代码

  1 //20160314||20160316||20160319
  2 //信1405-1班20142973魏垚
  3 //四则运算02
  4 
  5 import java.util.Scanner;
  6 
  7 public class Four_Operation_02 {
  8 
  9     public static void main(String[] args) {
 10         // TODO Auto-generated method stub
 11         
 12         Scanner in=new Scanner(System.in);
 13     
 14         System.out.print("请依次对以下要求做出选择:\n");
 15         System.out.print("1:请输入数值范围:\n");
 16         int numF=in.nextInt();                             //numF:数值范围
 17         System.out.print("2.请选择是否有乘除法:\n");
 18         System.out.print("(1):是            (2):否\n");
 19         int ccYN=in.nextInt();                             //ccYN:是否有乘除法
 20         int yushu = 0;
 21         if(ccYN==1)
 22         {
 23             System.out.print("除法是否有余数:\n");
 24             System.out.print("(1):是            (2):否\n");
 25             int ys=in.nextInt(); 
 26             yushu=ys;                                      //yushu:是否有余数
 27         }
 28         if(ccYN==2)
 29         {
 30             yushu=1;
 31         }
 32 //        System.out.print("3.是否有括号:\n");
 33 //        System.out.print("(1):是            (2):否\n");
 34 //        int khYN=in.nextInt();                             //khYN:是否有括号
 35         System.out.print("4.加减法是否有负数:\n");
 36         System.out.print("(1):是            (2):否\n");
 37         int fushu=in.nextInt();                            //fushu:是否有负数
 38         System.out.print("5.请输入打印数量:\n");
 39         int printNUM=in.nextInt();                         //printNUM:打印数量
 40         
 41         //调用
 42         BuildOperation(numF,ccYN,yushu,/*khYN,*/fushu,printNUM);
 43         
 44     }
 45     
 46     //定义函数,实现功能
 47     public static void BuildOperation(int a1,int a2,int a3,/*int a4,*/int a5,int a6){
 48                                       //numF  ccYN   yushu  khYN   fushu  printNUM
 49         
 50         //定义数组,分别储存计算式的第一个数字、符号和第二个数字
 51         int fir[]=new int[a6];//第一个数
 52         int mid[]=new int[a6]; //符号转化的中间变量
 53         char fh[]=new char[a6];//符号
 54         int sec[]=new int[a6];//第二个数
 55         
 56         int T;//控制重新生成随机数的变量
 57 
 58         for(int i=0;i<a6;i++)
 59         {
 60             T=0;
 61             
 62             //随机产生
 63             fir[i]=(int)(Math.random()*a1);
 64             mid[i]=(int)(Math.random()*a1);
 65             if(a2==2)
 66             {
 67                 mid[i]=mid[i]%2;
 68                 if(mid[i]==0)fh[i]='+';
 69                 if(mid[i]==1)fh[i]='-';
 70             }
 71             if(a2==1)
 72             {
 73                 mid[i]=mid[i]%4;
 74                 if(mid[i]==0)fh[i]='+';
 75                 if(mid[i]==1)fh[i]='-';
 76                 if(mid[i]==2)fh[i]='*';
 77                 if(mid[i]==3)fh[i]='/';
 78             }
 79             sec[i]=(int)(Math.random()*a1);
 80             if(fh[i]=='/')
 81             {
 82                 while(sec[i]==0)
 83                 {
 84                     sec[i]=(int)(Math.random()*a1);
 85                 }
 86             }
 87             
 88             //负数
 89             if(a5==2)
 90             {
 91                 if(fh[i]=='-')
 92                 {
 93                     if(fir[i]-sec[i]<0)T=1;
 94                 }
 95             }
 96             
 97             //余数
 98             if(a3==2)
 99             {
100                 if(fh[i]=='/')
101                 {
102                     if(fir[i]%sec[i]!=0)
103                         T=1;
104                 }
105             }
106             
107             //是否重复
108             for(int j=i-1;j>=0;j--)
109             {
110                 if(fh[i]==fh[j])
111                 {
112                     //判断数字有无相同
113                     if(fir[i]==fir[j]&&sec[i]==sec[j])
114                         T=1;
115                     //加法与乘法前后数字也不能都相同
116                     if(fh[i]=='+'||fh[i]=='/')
117                     {
118                         if(fir[i]==sec[j]&&sec[i]==fir[j])
119                             T=1;
120                     }    
121                 }
122             }
123             if(T==1)i--;
124         }
125         
126         //打印
127         for(int m=0;m<a6;m++)
128         {
129             System.out.print(fir[m]);
130             System.out.print(fh[m]);
131             System.out.print(sec[m]);
132             System.out.print("=\n");
133         }
134     }
135 }

三、程序运行截图

四.问题

程序并没有实现是否有括号(最多可以支持十个数参与计算)此功能。

五.时间记录日志

3.14:课堂上对问题初步了解,开始构思;

3.16:开始着手编程,对问题深入思考,用代码解决问题;(此次编程并未完成)3.19:对程序做最后完善,并且查看有无繁琐代码,将代码改到最简,最后完成编程。

六.缺陷记录日志

本次编程过程中对漏掉分号,括回号等语句代码错误未做及时记录,下次将如实做好记录;

本次编码中,最初准备用while语句对T值来循环实现查看是否重复功能,但在编写过程中,发现方法并不对,更改为将for循环句中i的值在满足某种情况下减1,实现功能。

截图:

后更改为: