四则运算升级版
(1)题目要求
1.定义方法验证题目是否重复;并将出题参数用子方法定义。
2.定义随机数生成器子方法,根据出题参数(出题个数、操作数的个数、确定操作数的取值范围)生成全部的随机操作数。
3.定义方法实现在线答题;全部完成后,显示答题结果,输出正确率和错题。
4.定义方法实现错题集、错题重练并记录错题的次数功能。
(2)源代码 有点小bug,仅供参考
package size; import java.util.*; import java.lang.Math; public class size { static int count=0; static int ccount=0; static int cuoticount=0; static int congzuosum=1; static int tishusum=0; static String []arr = new String[100000]; static String []arr1 = new String[100000]; static int []zqda = new int[100000]; static int []cishu = new int[100000]; static Scanner sc = new Scanner(System.in); //生成随机符号 public static char operator(int chengchu) { char op=' '; int n = (int)(Math.random()*999+1); if(chengchu==1) { switch(n%4) { case 0:op = '+';break; case 1:op = '-';break; case 2:op = '*';break; case 3:op = '/';break; } } else { switch(n%2) { case 0:op = '+';break; case 1:op = '-';break; } } return op; } //查重 public static int chachong(int min,int max,int sumoperate,int chengchu,int zhengquedaan,String str,int sumtitle,int []cishu,int []zqda) { boolean flag = true; if(count==0) { arr1[0]=str; return 1; } else { for (int j = 0; j <count; j++) { if( arr1[count]== arr1[j]) flag = false; } if(flag==true) { return 1; } else { return 0; } } } //生成随机四则运算
public static void problem(int min,int max,int sumoperate,int chengchu,int sumtitle,String []arr,int []cishu,int []zqda) { int a = (int)(Math.random()*(max-min)+min); int b = (int)(Math.random()*(max-min)+min); char c = operator(chengchu); String str = ""+a+c+b; int []cunshu = new int[1000]; char []cunfuhao =new char[1000]; int shu=0; int fuhao=0; if(c=='*') { cunshu[shu]=a*b; } else if(c=='/') { cunshu[fuhao]=a/b; } else { cunshu[shu]=a; shu++; cunshu[shu]=b; cunfuhao[fuhao]=c; } for(int i=2;i<sumoperate;i++) { int zenjiashu = (int)(Math.random()*(max-min)+min); char zenjiac = operator(chengchu); if(zenjiac=='*') { cunshu[shu]=cunshu[shu]*zenjiashu; } else if(c=='/') { cunshu[shu]=cunshu[shu]/zenjiashu; } else { shu++; cunshu[shu]=zenjiashu; fuhao++; cunfuhao[fuhao]=zenjiac; } str = str + zenjiac + zenjiashu; } int zhengquedaan=cunshu[0]; int cou=0; for(int j=0;j<=fuhao;j++) { if(cunfuhao[cou]=='+') { zhengquedaan+=cunshu[cou+1]; } else { zhengquedaan-=cunshu[cou+1]; } } int panduan=chachong(min,max,sumoperate,chengchu,zhengquedaan,str,sumtitle,cishu,zqda); if(panduan==1) { arr[ccount]=str; zqda[ccount]=zhengquedaan; System.out.println(arr[ccount]+"="); int daan; daan = sc.nextInt(); if(daan!=zhengquedaan) { cuoticount++; cishu[ccount]=1; } ccount++; } else { problem(min,max,sumoperate,sumtitle,chengchu,arr,cishu,zqda); } } public static int congzuoma() { System.out.println("是否需要错题重做:(1.是 2.否)"); int congzuoma; congzuoma = sc.nextInt(); return congzuoma; } public static void chongzuo(int sumtitle,String []arr,int []cishu,int []zqda) { System.out.println("错误率:"+cuoticount/tishusum*100+"%"); while(true) { if(congzuoma()==1) { int cuo=cuoticount; cuoticount=0; for(int k=0;k<cuo;k++) { for(int i=0;i<tishusum;i++) { if(cishu[i]==congzuosum) { System.out.println(arr[i]+"="); int da; da = sc.nextInt(); if(da!=zqda[i]) { System.out.println("正确答案:"+zqda[i]); cishu[i]+=1; cuoticount++; } } } } congzuosum++; System.out.println("错误率:"+cuoticount/sumtitle*100+"%"); } else { jielun(cishu,arr); break; } } } public static void jielun(int []cishu,String []arr) { for(int j=0;j<tishusum;j++) { if(cishu[j]!=0) { System.out.println(arr[j]+"你错了"+cishu[j]+"次"); } } } public static void main(String[] args) { int sumtitle;//出题个数 int sumoperate;//操作数个数 int min,max; int chengchu; System.out.println("请输入出题个数:"); sumtitle = sc.nextInt(); System.out.println("请输入操作数个数:"); sumoperate = sc.nextInt(); System.out.println("请输入操作数范围:"); min = sc.nextInt(); max = sc.nextInt(); if((max-min)<(2*sumoperate-1)*sumtitle) //系统崩溃条件 { System.out.println("系统崩溃!"); System.exit(0); } System.out.println("是否需要乘除运算:1.需要 2.不需要"); chengchu = sc.nextInt(); tishusum=sumtitle; for(int i=0;i<tishusum;i++) { problem(min,max,sumoperate,sumtitle,chengchu,arr,cishu,zqda); } chongzuo(sumtitle,arr,cishu,zqda); } }