又完善了一下,更好用了
代码如下:
class Nums
{
public double GetTrue(){return True;}
public double GetFalse() {return False;}
public int GetCurrent() {return Current;}
public int GetMAX() {return MAX;}
public void SetMAX(int MAX)
{this.MAX=MAX;this.arr=new int[MAX][4];
}public void AddTrue() {True+=1;}
public void AddFalse() {False+=1;}
public void AddCurrent() {Current++;}public void CalculateAccuracy()
{System.out.println("正确率:"+(True/MAX*100)+"%");
}private double True=0;
private double False=0;
private int MAX=0;
private int Current=0;public int[][] arr;
}
class judge
{
//判断题目是否重复
public static boolean judge1(int num1,int num2,Nums n)
{
int flag=1;
for(int i=0;i<n.GetCurrent();i++)
{
if(n.arr[i][0]num1&&n.arr[i][1]num2)
{
flag=0;
}
}
if(flag==1)
return true;
else
{
return false;
}
}
//判断是否满足运算
public static boolean judge2(int num1,int num2,int sign,Nums n)
{if(sign==1){if(num1<num2)return false;}if(sign==2){if(num1*num2>=1000)return false;}if(sign==3){if(num2==0||num1%num2!=0)return false;}return true;
}//判断相邻运算是否相同
public static boolean judge3(int sign,Nums n)
{if(n.GetCurrent()==0)return true;if(sign==n.arr[n.GetCurrent()-1][2]){return false;}return true;
}public static boolean judge4(int sign,Nums n)
{if(n.GetCurrent()==0)return true;else if(n.GetCurrent()==1)if(n.arr[n.GetCurrent()-1][2]==sign)return false;else if(n.GetCurrent()==2)if(n.arr[n.GetCurrent()-1][2]==sign||n.arr[n.GetCurrent()-2][2]==sign)return false;else if(sign==n.arr[n.GetCurrent()-1][2]||sign==n.arr[n.GetCurrent()-2][2]||sign==n.arr[n.GetCurrent()-3][2])return false;return true;
}
}
public class 平常练习 {
static Nums n=new Nums();//出题系统//判断是否相等子方法
static void Equal(int num,int ans,Nums n)
{double f=0.000001;if(ans-num<f){n.AddTrue();System.out.println("回答正确");}else{System.out.println("回答错误,正确答案:"+ans);n.AddFalse();}
}//生成随机数并生成题目
static void CreateQuestion(Scanner sc)
{System.out.print("请输入您要生成的题目数量:");int MAX=sc.nextInt();n.SetMAX(MAX);while(n.GetCurrent()!=n.GetMAX()){Random ran=new Random();int num1=ran.nextInt(100);int num2=ran.nextInt(100);int sign=ran.nextInt(4);if(!judge.judge1(num1,num2,n)){continue;}if(!judge.judge2(num1,num2,sign,n)){continue;}if(!judge.judge3(sign,n)){continue;}if(!judge.judge4(sign, n)){continue;}//满足题目不重复,运算规则合法,相邻运算不重复,某一运算不能连续五次不出现之后,将数据赋值给数组n.arr[n.GetCurrent()][0]=num1;n.arr[n.GetCurrent()][1]=num2;n.arr[n.GetCurrent()][2]=sign;switch(sign){case 0:{System.out.print("第"+(n.GetCurrent()+1)+"道题目:"+num1+"+"+num2+"=");int num=sc.nextInt();Equal(num,num1+num2,n);break;}case 1:{System.out.print("第"+(n.GetCurrent()+1)+"道题目:"+num1+"-"+num2+"=");int num=sc.nextInt();Equal(num,num1-num2,n);break;}case 2:{System.out.print("第"+(n.GetCurrent()+1)+"道题目:"+num1+"*"+num2+"=");int num=sc.nextInt();Equal(num,num1*num2,n);break;}case 3:{System.out.print("第"+(n.GetCurrent()+1)+"道题目:"+num1+"/"+num2+"=");int num=sc.nextInt();Equal(num,num1/num2,n);break;}}n.AddCurrent();}n.CalculateAccuracy();
}public static void main(String[] args)
{Scanner sc=new Scanner(System.in);CreateQuestion(sc);
}
}