出题系统

又完善了一下,更好用了

代码如下:
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(sign1)
{
if(num1<num2)
return false;
}
if(sign
2)
{
if(num1*num2>=1000)
return false;
}
if(sign3)
{
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(signn.arr[n.GetCurrent()-1][2]||signn.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);
}

}

posted @ 2025-10-08 15:46  暗神酱  阅读(19)  评论(0)    收藏  举报