改动原因:上个星期的作业没有说清是否需要输出结果,由于我第一次作业也输出了结果(虽然看其他人也都没有输出结果),于是决定第二次也要输出结果,结果就卡在输出结果上了,写了整整几个小时也没写出来个所以然,结果就企图用最基本的if else语句来解决问题,导致最后写了足足4K行,也没有成功实现。这个星期留完作业后,才意识到前两次作业并不需要输出结果,加上这两天时间充裕,于是又反过来想了一下,写了一个改良版的第二次作业,如下:
1.设计思想:
① 在程序的开头询问需要的条件:
1>是否有乘除法;
2>是否有括号(最多可以支持十个数参与计算);
3>数值范围;
4>加减有无负数;
5>除法有无余数(若前面询问的有无乘除法为无,则不再询问);
6>一共有多少个式子;
② 设定一个二维数组,大小为number(总式子数量)X 10;
③ 设定一个循环来监测有多少次有效的循环,当循环达到number时,结束程序;
否则,对各个位进行随机取值,并保存在数组里,并且和之前随机产生的数组进行比较,若完全相同,则重新随机取值,否则,随机产生一个数字来判定每个式子是有几个数字组成的,并且设定一个对应长度的数组来存放相应个数的运算符号,对每一位进行挨个输出,若存在数字为负数,则在输出时在两边同时加上括号。
2.源程序代码:
1 import java.util.Scanner; 2 3 public class SecondCalculate 4 { 5 public static void main(String args[]) 6 { 7 @SuppressWarnings("resource") 8 Scanner in=new Scanner(System.in); 9 //---------------要求规定--------- 10 System.out.print("请输入打印运算式的数量:"); 11 int number=in.nextInt(); 12 13 char symbollist[]=new char[4]; 14 System.out.print("①请问是否有乘除法(1:是 2:不是):"); 15 int flag=in.nextInt(); 16 if(flag==1) 17 { 18 symbollist[0]='+'; 19 symbollist[1]='-'; 20 symbollist[2]='*'; 21 symbollist[3]='/'; 22 } 23 else 24 { 25 symbollist[0]='+'; 26 symbollist[1]='-'; 27 symbollist[2]='+'; 28 symbollist[3]='-'; 29 } 30 31 System.out.print("②请问是否有括号(1:是 2:不是):"); 32 int boolbracket=in.nextInt(); 33 34 System.out.print("③请问需要数据范围是(先输入下界,后输入上界):"); 35 double min=in.nextDouble(); 36 double max=in.nextDouble(); 37 38 System.out.print("④请问加减有无负数(1:有 2.无):"); 39 int negative=in.nextInt(); 40 if(negative==2) 41 { 42 if(min<0) 43 { 44 min=0; 45 } 46 } 47 48 if(flag==1) 49 { 50 System.out.print("⑤除法有无余数(1:是 2:不是):"); 51 int boolremainder=in.nextInt(); 52 } 53 System.out.println(); 54 55 56 int space[][]=new int [number][10]; 57 int symtime,time; 58 59 for(time=0;time<number;) 60 { 61 for(int i=0;i<10;i++) 62 { 63 space[time][i]=(int)(Math.random()*(max-min+1)+min); 64 } 65 //判断所生成的数组中是否和之前产生的数组完全一致 66 int flag1=1; 67 for(int i=0;i<time;i++) 68 { 69 for(int j=0;j<10;j++) 70 { 71 if(space[time][j]==space[i][j]) 72 { 73 flag1=0; 74 } 75 else 76 { 77 flag1=1; 78 } 79 } 80 } 81 //随机判断下面要产生的式子是由几个数字构成的 82 int s=(int)(Math.random()*(10-2+1)+2); 83 84 if(flag1==1) 85 { 86 if(boolbracket==1&&s!=2) 87 { 88 System.out.print("("); 89 } 90 System.out.print(space[time][0]); 91 char p[]=new char [s-1]; 92 for(int i=1;i<s;i++) 93 { 94 symtime=(int)(Math.random()*(3-0+1)+0); 95 p[i-1]=symbollist[symtime]; 96 System.out.print(p[i-1]); 97 if(space[time][i]<0) 98 { 99 System.out.print("("+space[time][i]+")"); 100 } 101 else 102 { 103 System.out.print(space[time][i]); 104 } 105 106 if(boolbracket==1&&i==(s-1)/2&&s!=2) 107 { 108 System.out.print(")"); 109 } 110 } 111 System.out.println("="); 112 time++; 113 } 114 } 115 } 116 }
3.运行结果截图: