题目:
设计思想:随机产生相应个数的随机数当做运算数,随机产生0-1或0-3当做运算符。运用if语句控制变量的运行,是否有括号,加减是否有负数,除法是否有余数。数值范围的控制通过随机数int x1=(int)(Math.random()*fan2+fan1)控制。
package sizeyunsuan2; import java.util.Scanner; public class yunsuan2 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner num=new Scanner(System.in); System.out.println("请选择题目类型:1.整数 2.真分数"); int type=num.nextInt(); System.out.println("请输入数值范围起始值:"); int fan1=num.nextInt(); System.out.println("请输入数值范围终点值:"); int fan2=num.nextInt(); if(type==1) { System.out.println("请输入出题数量:"); int n = num.nextInt(); System.out.println("请选择是否有乘除法:1.是 2.否"); int chu=num.nextInt(); System.out.println("请选择加减是否有负数:1.是 2.否"); int fu=num.nextInt(); System.out.println("请选择除法是否有余数:1.是 2.否"); int yu=num.nextInt(); //这个数组是用来存放已经出好的题 String timu[]=new String [n]; String q1=""; if(chu==1&&fu==1&&yu==1) { for(int i=0;i<n;i++) { int z=0; int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 4);//用来判断四则运算的符号 z=x%y;//判断是否有余数 if(a==0)q1=x+"+"+y+"="; if(a==1)q1=x+"-"+y+"="; if(a==2)q1=x+"*"+y+"="; if(a==3&&(z!=0))q1=x+"/"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } if(chu==1&&fu==1&&yu==2) { for(int i=0;i<n;i++) { int z=0; int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 4);//用来判断四则运算的符号 z=x%y;//判断是否有余数 if(a==0)q1=x+"+"+y+"="; if(a==1)q1=x+"-"+y+"="; if(a==2)q1=x+"*"+y+"="; if(a==3&&(z==0))q1=x+"/"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } if(chu==1&&fu==2&&yu==1) { for(int i=0;i<n;i++) { int z=0; int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 4);//用来判断四则运算的符号 z=x%y;//判断是否有余数 if(a==0)q1=x+"+"+y+"="; if(a==1&&(x>=y))q1=x+"-"+y+"="; if(a==2)q1=x+"*"+y+"="; if(a==3&&(z!=0))q1=x+"/"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } if(chu==1&&fu==2&&yu==2) { for(int i=0;i<n;i++) { int z=0; int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 4);//用来判断四则运算的符号 z=x%y;//判断是否有余数 if(a==0)q1=x+"+"+y+"="; if(a==1&&(x>=y))q1=x+"-"+y+"="; if(a==2)q1=x+"*"+y+"="; if(a==3&&(z==0))q1=x+"/"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } if(chu==2&&fu==1) { for(int i=0;i<n;i++) { int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 2);//用来判断四则运算的符号 if(a==0)q1=x+"+"+y+"="; if(a==1)q1=x+"-"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } if(chu==2&&fu==2) { for(int i=0;i<n;i++) { int x=(int)(Math.random()*fan2+fan1);//第一个数 int y=(int)(Math.random()*fan2+fan1);//第二个数 int a=(int)(Math.random() * 2);//用来判断四则运算的符号 if(a==0)q1=x+"+"+y+"="; if(a==1&&(x>=y))q1=x+"-"+y+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } } if(type==2) { System.out.println("请输入出题数量:"); int n = num.nextInt()+1; System.out.println("请选择是否有乘除法:1.是 2.否"); int chu=num.nextInt(); System.out.println("请选择加减是否有负数:1.是 2.否"); int fu=num.nextInt(); //这个数组是用来存放已经出好的题 String timu[]=new String [n]; if(chu==1&&fu==1) { int z=0,z1,z2; for(int i=0;i<n;i++) { int x1=(int)(Math.random()*fan2+fan1);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 z1=x1/y1; int x2=(int)(Math.random()*fan2+fan1+1);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 z2=x2/y2; String q1=""; int a=(int)(Math.random() * 4);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; if(a==1) q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; if(a==2) q1="("+x1+"/"+y1+")"+"*"+"("+x2+"/"+y2+")"+"="; if(a==3&&(z2!=0)&&(z!=0)) q1="("+x1+"/"+y1+")"+"/"+"("+x2+"/"+y2+")"+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } } if(chu==2&&fu==1) { int z1,z2; for(int i=0;i<n;i++) { int x1=(int)(Math.random()*fan2+fan1);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 z1=x1/y1; int x2=(int)(Math.random()*fan1);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 z2=x2/y2; String q1=""; int a=(int)(Math.random() * 2);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; if(a==1) q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } } if(chu==1&&fu==2) { int z1,z2; for(int i=0;i<n;i++) { int x1=(int)(Math.random()*fan2+fan1);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 z1=x1/y1; int x2=(int)(Math.random()*fan1);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 z2=x2/y2; String q1=""; int a=(int)(Math.random() * 4);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; if(a==1&&(z1>=z2)) q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; if(a==2) q1="("+x1+"/"+y1+")"+"*"+"("+x2+"/"+y2+")"+"="; if(a==3&&(z2!=0)) q1="("+x1+"/"+y1+")"+"/"+"("+x2+"/"+y2+")"+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } } if(chu==2&&fu==2) { int z1,z2; for(int i=0;i<n;i++) { int x1=(int)(Math.random()*fan2+fan1);//分子 int y1=(int)(Math.random()*fan2+fan1+1);//分母 z1=x1/y1; int x2=(int)(Math.random()*fan1);//分子 int y2=(int)(Math.random()*fan2+fan1+1);//分母 z2=x2/y2; String q1=""; int a=(int)(Math.random() * 2);//用来判断四则运算的符号 if(x2==0&&a==3) i--; else{ if(a==0) q1=x1+"/"+y1+"+"+x2+"/"+y2+"="; if(a==1&&(z1>=z2)) q1=x1+"/"+y1+"-"+x2+"/"+y2+"="; int j; for(j=0;j<i;j++) { if(q1.equals(timu[j])) { i--; break; } } if(j==i){ timu[i]=q1; System.out.println(q1);} } } } } } }
结果截图:
这次实验没有实现随机括号的功能,在编写过程中出现了较多错误,已经有了较为清晰的思路,但还未将程序调试成功。