测试2-随机生成四则运算
本周Java课上,王建民老师组织我们进行了又一轮的测试,这次我们测试的题目为随机生成四则运算题
要求可以制定题目的数量,每行的数目,是否有乘除法,是否含有括号,取值范围等要求。
源码如下
package Test; import java.util.Random; import java.util.Scanner; public class class1 { public static void main(String []args) { Scanner sc=new Scanner(System.in); Random random=new Random(); System.out.println("请输入题目数量"); int x=sc.nextInt(); System.out.println("请输入每行的数目"); int y=sc.nextInt(); System.out.println("请输入操作数的个数"); int z=sc.nextInt(); System.out.println("是否含有乘除法(1.是 2.否)"); int m=sc.nextInt(); System.out.println("是否含有括号(1.是 2.否)"); int n=sc.nextInt(); System.out.println("请输入操作数的取值范围"); int s=sc.nextInt(); int v=sc.nextInt(); int[] op = new int[x]; if(m==2)//不含有乘除法 { if(n==2)//不含有括号 { for(int i=0;i<x;i++) { for(int j=0;j<z;j++)//建立一个循环来实现操作数的数量的相加 { op[j]=(int) (Math.random() * 2) ;//生成随机数来判断符号 int a = (int) (Math.random() * (v-11)) +s ; //生成一个s-v的随机数 if(j==z-1) { System.out.print(a+"= ");} else System.out.print(a+ getOP(op[j])); } if((i+1)%y==0) { System.out.print("\n"); } } } if(n==1)//含有括号 { for(int i=0;i<x;i++) { int b=(int)(Math.random()*2); for(int j=0;j<z;j++) { op[j]=(int) (Math.random() * 4); int a = (int) (Math.random() * (v-11)) +s ; if(b==1) { if(j==z-1) { System.out.print(a+"= "); } else if(j==0)//对于括号位置的不同情况进行分类 { System.out.print("("+a+ getOP(op[j])); } else System.out.print(a+")"+ getOP(op[j])); } else if (b==0) { if(j==z-1) { System.out.print(a+"= "); } else if(j==1) { System.out.print("("+a+ getOP(op[j])); } else if(j==0) { System.out.print(a+ getOP(op[j])); } else System.out.print(a+")"+ getOP(op[j])); } else { if(j==z-1) { System.out.print(a+"= "); } else System.out.print(a+ getOP(op[j])); } } if((i+1)%y==0) { System.out.print("\n"); } } } } if(m==1)//含有乘除法 { if(n==2)//不含括号 for(int i=0;i<x;i++) { for(int j=0;j<z;j++) { op[j]=(int) (Math.random() * 4) ; int a = (int) (Math.random() * (v-11)) +s ; if(n==2) { if(j==z-1) { System.out.print(a+"= ");} else System.out.print(a+ getOP(op[j])); } if(n==1) { if(j==z-1) { System.out.print(a+"= ");} else System.out.print(a+ getOP(op[j])); } } if((i+1)%y==0) { System.out.print("\n"); } } if(n==1)//含有括号 { for(int i=0;i<x;i++) { int b=(int)(Math.random()*4); for(int j=0;j<z;j++) { op[j]=(int) (Math.random() * 4); int a = (int) (Math.random() * (v-11)) +s ; if(b==1) { if(j==z-1) { System.out.print(a+"= "); } else if(j==0) { System.out.print("("+a+ getOP(op[j])); } else System.out.print(a+")"+ getOP(op[j])); } else if (b==0) { if(j==z-1) { System.out.print(a+"= "); } else if(j==1) { System.out.print("("+a+ getOP(op[j])); } else if(j==0) { System.out.print(a+ getOP(op[j])); } else System.out.print(a+")"+ getOP(op[j])); } else { if(j==z-1) { System.out.print(a+"= "); } else System.out.print(a+ getOP(op[j])); } } if((i+1)%y==0) { System.out.print("\n"); } } } } } public static String getOP(int index)//建立一个函数通过代入一个树来生成随机的运算符 { String string=" "; switch(index) { case 0: string="+";break; case 1:string ="-";break; case 2:string ="*";break; case 3:string ="/";break; } return string; } }
这道题的编写有投机取巧的成分,对于括号的随机分布仍不能完美实现。做完本周的测试,我深深感受到了代码简洁的重要性,在完成一个程序时,要将整个程序分割成不同的小部分来逐个实现。在一开始写这道题时,我将所有的功能都放在一起编写,当时我根本没有分清楚每个功能的实现情况,后来我通过分别实现不同的功能模块,然后将整个模块组合在一起,才完成这个程序

浙公网安备 33010602011771号