一.程序设计思想
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("请依次对以下要求做出选择: "); 15 System.out.print("1:请输入数值范围: "); 16 int numF=in.nextInt(); //numF:数值范围 17 System.out.print("2.请选择是否有乘除法: "); 18 System.out.print("(1):是 (2):否 "); 19 int ccYN=in.nextInt(); //ccYN:是否有乘除法 20 int yushu = 0; 21 if(ccYN==1) 22 { 23 System.out.print("除法是否有余数: "); 24 System.out.print("(1):是 (2):否 "); 25 int ys=in.nextInt(); 26 yushu=ys; //yushu:是否有余数 27 } 28 if(ccYN==2) 29 { 30 yushu=1; 31 } 32 // System.out.print("3.是否有括号: "); 33 // System.out.print("(1):是 (2):否 "); 34 // int khYN=in.nextInt(); //khYN:是否有括号 35 System.out.print("4.加减法是否有负数: "); 36 System.out.print("(1):是 (2):否 "); 37 int fushu=in.nextInt(); //fushu:是否有负数 38 System.out.print("5.请输入打印数量: "); 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("= "); 133 } 134 } 135 }
三、程序运行截图
四.问题
程序并没有实现是否有括号(最多可以支持十个数参与计算)此功能。
五.时间记录日志
3.14:课堂上对问题初步了解,开始构思;
3.16:开始着手编程,对问题深入思考,用代码解决问题;(此次编程并未完成)3.19:对程序做最后完善,并且查看有无繁琐代码,将代码改到最简,最后完成编程。
六.缺陷记录日志
本次编程过程中对漏掉分号,括回号等语句代码错误未做及时记录,下次将如实做好记录;
本次编码中,最初准备用while语句对T值来循环实现查看是否重复功能,但在编写过程中,发现方法并不对,更改为将for循环句中i的值在满足某种情况下减1,实现功能。
截图:
后更改为: