出题系统
又完善了一下,更好用了
代码如下:
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);
}
}
浙公网安备 33010602011771号