(1)题目要求
1.定义方法验证题目是否重复;并将出题参数用子方法定义。
2.定义随机数生成器子方法,根据出题参数(出题个数、操作数的个数、确定操作数的取值范围)生成全部的随机操作数。
3.定义方法实现在线答题;全部完成后,显示答题结果,输出正确率和错题。
4.定义方法实现错题集、错题重练并记录错题的次数功能。
代码:
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);
}
}