要求:

代码示例:
import java.util.Random;
import java.util.Scanner;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test1to3 {
public static double eval(String str) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine se = manager.getEngineByName("js");
        Double result = null;
        try {
            result = Double.valueOf(se.eval(str).toString());
            if (result == null) {
                result = new Double(0);
            }
        } catch (ScriptException e) {
            e.printStackTrace();
        }
        return result;
    }
	public static void exercise(int grade,int num1,int num2) {//num1为出题个数,num2为操作数数值范围
		if(grade==2) {
			int n1;
			int n2;
			int i,j,rightnum=0,i1=0,i2=0,i3=0,i4=0,choice;
			char c;
			double sum,accurary;
			int number1[]=new int[100];
			int number2[]=new int[100];
			int number3[]=new int[100];
			int number4[]=new int[100];
			int number5[]=new int[100];
			int number6[]=new int[100];
			int number7[]=new int[100];
			int number8[]=new int[100];
			char[] operator=new char[]{‘+‘,‘-‘,‘*‘,‘/‘};
			Random rand = new Random();
			for(i=1;i<=num1;i++) {
			j=rand.nextInt(4);
			c=operator[j];
			do {
			n1=rand.nextInt(num2);
			n2=rand.nextInt(num2);
			}while(n1==0&&n2==0);
			if(c==‘+‘) {
				int result;
				sum=n1+n2;
				System.out.print("第"+i+"道题为:");
				System.out.println(n1+"+"+n2+"=");
				System.out.println("请输入计算结果:");
				Scanner sc=new Scanner(System.in);
				result=sc.nextInt();
				System.out.println("答题结果为:"+n1+"+"+n2+"="+result);
				if(result==sum) {
					rightnum+=1;
				}
				else {
					i1+=1;
					number1[i1]=n1;
					number2[i1]=n2;		
				}
				}
				else if(c==‘-‘) {
					int result;
					sum=n1-n2;
					System.out.print("第"+i+"道题为:");
					System.out.println(n1+"-"+n2+"=");
					System.out.println("请输入计算结果:");
					Scanner sc=new Scanner(System.in);
					result=sc.nextInt();
					System.out.println("答题结果为:"+n1+"-"+n2+"="+result);
					if(result==sum) {
						rightnum+=1;
					}
					else {
						i2+=1;
						number3[i2]=n1;
						number4[i2]=n2;		
					}
				}
				else if(c==‘*‘) {
					int result;
					sum=n1*n2;
					System.out.print("第"+i+"道题为:");
					System.out.println(n1+"*"+n2+"=");
					System.out.println("请输入计算结果:");
					Scanner sc=new Scanner(System.in);
					result=sc.nextInt();
					System.out.println("答题结果为:"+n1+"*"+n2+"="+result);
					if(result==sum) {
						rightnum+=1;
					}
					else {
						i3+=1;
						number5[i3]=n1;
						number6[i3]=n2;		
					}
				}
				else if(c==‘/‘) {
					int result;
					if(n1%n2!=0) {
						do {
							n1=rand.nextInt(num2);
							n2=rand.nextInt(num2);
							}while(n1%n2!=0);
					}
					sum=(double)n1/(double)n2;
					System.out.print("第"+i+"道题为:");
					System.out.println(n1+"/"+n2+"=");
					System.out.println("请输入计算结果:");
					Scanner sc=new Scanner(System.in);
					result=sc.nextInt();
					System.out.println("答题结果为:"+n1+"/"+n2+"="+result);
					if(result==sum) {
						rightnum+=1;
					}
					else {
						i4+=1;
						number7[i4]=n1;
						number8[i4]=n2;		
					}
				}
				}
				accurary=(double)rightnum/num1;
				System.out.println("您的正确率为:"+accurary*100+"%");
				System.out.println("您的错题集为:");
				for(i=1;i<=i1;i++) {
					System.out.println(number1[i]+"+"+number2[i]+"=");
				}
				for(i=1;i<=i2;i++) {
					System.out.println(number3[i]+"-"+number4[i]+"=");
				}
				for(i=1;i<=i3;i++) {
					System.out.println(number5[i]+"*"+number6[i]+"=");
				}
				for(i=1;i<=i4;i++) {
					System.out.println(number7[i]+"/"+number8[i]+"=");
				}
				do {
					System.out.println("错题重练请按1,结束练习请按0:");
					Scanner in=new Scanner(System.in);
					choice=in.nextInt();
					if(choice==1) {
						for(i=1;i<=i1;i++) {
							double result;
							int wrongnum=1;
							System.out.println(number1[i]+"+"+number2[i]+"=");
							sum=number1[i]+number2[i];
							System.out.println("请输入计算结果:");
							result=in.nextDouble();
							System.out.println("答题结果为:"+number1[i]+"+"+number2[i]+"="+result);
							if(result!=sum) {
								wrongnum+=1;
								System.out.println("回答错误,该题错误次数为"+wrongnum);
							}
							else {
								System.out.println("回答正确,本题错误次数为:"+wrongnum);
							}
						}
						for(i=1;i<=i2;i++) {
							double result;
							int wrongnum=1;
							System.out.println(number3[i]+"-"+number4[i]+"=");
							sum=number3[i]-number4[i];
							System.out.println("请输入计算结果:");
							result=in.nextDouble();
							System.out.println("答题结果为:"+number3[i]+"-"+number4[i]+"="+result);
							if(result!=sum) {
								wrongnum+=1;
								System.out.println("回答错误,该题错误次数为"+wrongnum);
						}
							else {
								System.out.println("回答正确,本题错误次数为:"+wrongnum);
							}
						}
						for(i=1;i<=i3;i++) {
							double result;
							int wrongnum=1;
							System.out.println(number5[i]+"*"+number6[i]+"=");
							sum=number5[i]*number6[i];
							System.out.println("请输入计算结果:");
							result=in.nextDouble();
							System.out.println("答题结果为:"+number5[i]+"*"+number6[i]+"="+result);
							if(result!=sum) {
								wrongnum+=1;
								System.out.println("回答错误,该题错误次数为"+wrongnum);
						}
							else {
								System.out.println("回答正确,本题错误次数为:"+wrongnum);
							}
						}
						for(i=1;i<=i4;i++) {
							double result;
							int wrongnum=1;
							System.out.println(number7[i]+"/"+number8[i]+"=");
							sum=(double)number7[i]/(double)number8[i];
							System.out.println("请输入计算结果:");
							result=in.nextDouble();
							System.out.println("答题结果为:"+number7[i]+"/"+number8[i]+"="+result);
							if(result!=sum) {
								wrongnum+=1;
								System.out.println("回答错误,该题错误次数为"+wrongnum);
						}
							else {
								System.out.println("回答正确,本题错误次数为:"+wrongnum);
							}
					}
					}
					}while(choice==1);
			}
		if(grade==3) {
			int num,n1,n2,n3,n4,i,j,k,l,wrongnum=0,choice;
			char operator1,operator2,operator3;
			char[] operator=new char[]{‘+‘,‘-‘,‘*‘,‘/‘};
			String[] wrong=new String[100];
			String[] couts=new String[100];
			double[] sum=new double[100];
			Scanner sc=new Scanner(System.in);
			Random rand=new Random();
			System.out.println("请输入操作数个数:");
			num=sc.nextInt();
			if(num==3) {
				for(i=1;i<=num1;i++) {
				int result;
				n1=rand.nextInt(num2);
				n2=rand.nextInt(num2);
				n3=rand.nextInt(num2);
				j=rand.nextInt(4);
				k=rand.nextInt(4);
				operator1=operator[j];
				operator2=operator[k];
				String s1 = String.valueOf(n1);//将数字n1转换为字符串s1
				String s2 = String.valueOf(n2);//将数字n2转换为字符串s2
				String s3 = String.valueOf(n3);//将数字n3转换为字符串s3
				String s4 = String.valueOf(operator1);//将字符operator1转换为字符串s4
				String s5 = String.valueOf(operator2);//将字符operator2转换为字符串s5
				String s6 ="=";
				String cout=s1+s4+s2+s5+s3+s6;
				couts[i]=s1+s4+s2+s5+s3;
				System.out.println(cout);
				sum[i]=eval(couts[i]);
				result=sc.nextInt();
				if(result!=sum[i]) {
					wrong[wrongnum]=cout;
					wrongnum+=1;
				}
			}
				System.out.println("您的错题集为:");
				for(i=0;i<wrongnum;i++) {
					System.out.println(wrong[i]);
				}
				do {
				System.out.println("错题重练请按1,退出请按0");
				choice=sc.nextInt();
				if(choice==1) {
					int result;
					for(i=0;i<wrongnum;i++) {
						int wrongn=1;//记录错误次数
						System.out.println(wrong[i]);
						result=sc.nextInt();
						if(result==sum[i+1]) {
							System.out.println("回答正确,该题错误次数为"+wrongn);
						}
						else {
							wrongn+=1;
							System.out.println("回答错误,该题错误次数为"+wrongn);
						}
					}
				}
				}while(choice==1);
		}
			if(num==4) {
				for(i=1;i<=num1;i++) {
				int result;
				n1=rand.nextInt(num2);
				n2=rand.nextInt(num2);
				n3=rand.nextInt(num2);
				n4=rand.nextInt(num2);
				j=rand.nextInt(4);
				k=rand.nextInt(4);
				l=rand.nextInt(4);
				operator1=operator[j];
				operator2=operator[k];
				operator3=operator[l];
				String s1 = String.valueOf(n1);//将数字n1转换为字符串s1
				String s2 = String.valueOf(n2);//将数字n2转换为字符串s2
				String s3 = String.valueOf(n3);//将数字n3转换为字符串s3
				String s4 = String.valueOf(n3);//将数字n4转换为字符串s4
				String s5 = String.valueOf(operator1);//将字符operator1转换为字符串s4
				String s6 = String.valueOf(operator2);//将字符operator2转换为字符串s5
				String s7 = String.valueOf(operator3);//将字符operator2转换为字符串s5
				String s8 ="=";
				String cout=s1+s5+s2+s6+s3+s7+s4+s8;
				couts[i]=s1+s5+s2+s6+s3+s7+s4;
				System.out.println(cout);
				sum[i]=eval(couts[i]);
				result=sc.nextInt();
				if(result!=sum[i]) {
					wrong[wrongnum]=cout;
					wrongnum+=1;
				}
			}
				System.out.println("您的错题集为:");
				for(i=0;i<wrongnum;i++) {
					System.out.println(wrong[i]);
				}
				do {
				System.out.println("错题重练请按1,退出请按0");
				choice=sc.nextInt();
				if(choice==1) {
					int result;
					for(i=0;i<wrongnum;i++) {
						int wrongn=1;//记录错误次数
						System.out.println(wrong[i]);
						result=sc.nextInt();
						if(result==sum[i+1]) {
							System.out.println("回答正确,该题错误次数为"+wrongn);
						}
						else {
							wrongn+=1;
							System.out.println("回答错误,该题错误次数为"+wrongn);
						}
					}
				}
		}while(choice==1);
			}
	}
		if(grade==4) {//四年级题目
			int num,n1,n2,n3,n4,n5,i,j,k,l,m,wrongnum=0,choice;
			char operator1,operator2,operator3,operator4;
			char[] operator=new char[]{‘+‘,‘-‘,‘*‘,‘/‘};
			String[] wrong=new String[100];
			String[] couts=new String[100];
			double[] sum=new double[100];
			Scanner sc=new Scanner(System.in);
			Random rand=new Random();
			System.out.println("请输入操作数个数:");
			num=sc.nextInt();
			if(num==3) {
				for(i=1;i<=num1;i++) {
				int result;
				n1=rand.nextInt(num2);
				n2=rand.nextInt(num2);
				n3=rand.nextInt(num2);
				j=rand.nextInt(4);
				k=rand.nextInt(4);
				operator1=operator[j];
				operator2=operator[k];
				String s1 = String.valueOf(n1);//将数字n1转换为字符串s1
				String s2 = String.valueOf(n2);//将数字n2转换为字符串s2
				String s3 = String.valueOf(n3);//将数字n3转换为字符串s3
				String s4 = String.valueOf(operator1);//将字符operator1转换为字符串s4
				String s5 = String.valueOf(operator2);//将字符operator2转换为字符串s5
				String s6 ="=";
				String cout=s1+s4+s2+s5+s3+s6;
				couts[i]=s1+s4+s2+s5+s3;
				System.out.println(cout);
				sum[i]=eval(couts[i]);
				result=sc.nextInt();
				if(result!=sum[i]) {
					wrong[wrongnum]=cout;
					wrongnum+=1;
				}
			}
				System.out.println("您的错题集为:");
				for(i=0;i<wrongnum;i++) {
					System.out.println(wrong[i]);
				}
				System.out.println("错题重练请按1,退出请按0");
				choice=sc.nextInt();
				if(choice==1) {
					int result;
					for(i=0;i<wrongnum;i++) {
						System.out.println(wrong[i]);
						result=sc.nextInt();
						if(result==sum[i+1]) {
							System.out.println("回答正确,该题错误次数为");
						}
					}
				}
		}
			if(num==4) {
				for(i=1;i<=num1;i++) {
				int result;
				n1=rand.nextInt(num2);
				n2=rand.nextInt(num2);
				n3=rand.nextInt(num2);
				n4=rand.nextInt(num2);
				j=rand.nextInt(4);
				k=rand.nextInt(4);
				l=rand.nextInt(4);
				operator1=operator[j];
				operator2=operator[k];
				operator3=operator[l];
				String s1 = String.valueOf(n1);//将数字n1转换为字符串s1
				String s2 = String.valueOf(n2);//将数字n2转换为字符串s2
				String s3 = String.valueOf(n3);//将数字n3转换为字符串s3
				String s4 = String.valueOf(n3);//将数字n4转换为字符串s4
				String s5 = String.valueOf(operator1);//将字符operator1转换为字符串s4
				String s6 = String.valueOf(operator2);//将字符operator2转换为字符串s5
				String s7 = String.valueOf(operator3);//将字符operator2转换为字符串s5
				String s8 ="=";
				String cout=s1+s5+s2+s6+s3+s7+s4+s8;
				couts[i]=s1+s5+s2+s6+s3+s7+s4;
				System.out.println(cout);
				sum[i]=eval(couts[i]);
				result=sc.nextInt();
				if(result!=sum[i]) {
					wrong[wrongnum]=cout;
					wrongnum+=1;
				}
			}
				System.out.println("您的错题集为:");
				for(i=0;i<wrongnum;i++) {
					System.out.println(wrong[i]);
				}
				do {
				System.out.println("错题重练请按1,退出请按0");
				choice=sc.nextInt();
				if(choice==1) {
					int result;
					for(i=0;i<wrongnum;i++) {
						int wrongn=1;//记录错误次数
						System.out.println(wrong[i]);
						result=sc.nextInt();
						if(result==sum[i+1]) {
							System.out.println("回答正确,该题错误次数为"+wrongn);
						}
						else {
							wrongn+=1;
							System.out.println("回答错误,该题错误次数为"+wrongn);
						}
					}
				}
		}while(choice==1);
	}
			if(num==5) {
				for(i=1;i<=num1;i++) {
				int result;
				n1=rand.nextInt(num2);
				n2=rand.nextInt(num2);
				n3=rand.nextInt(num2);
				n4=rand.nextInt(num2);
				n5=rand.nextInt(num2);
				j=rand.nextInt(4);
				k=rand.nextInt(4);
				l=rand.nextInt(4);
				m=rand.nextInt(4);
				operator1=operator[j];
				operator2=operator[k];
				operator3=operator[l];
				operator4=operator[m];
				String s1 = String.valueOf(n1);//将数字n1转换为字符串s1
				String s2 = String.valueOf(n2);//将数字n2转换为字符串s2
				String s3 = String.valueOf(n3);//将数字n3转换为字符串s3
				String s4 = String.valueOf(n3);//将数字n4转换为字符串s4
				String s5 = String.valueOf(n3);//将数字n5转换为字符串s5
				String s6 = String.valueOf(operator1);//将字符operator1转换为字符串s6
				String s7 = String.valueOf(operator2);//将字符operator2转换为字符串s7
				String s8 = String.valueOf(operator3);//将字符operator3转换为字符串s8
				String s9 = String.valueOf(operator4);//将字符operator4转换为字符串s9
				String s10 ="=";
				String cout=s1+s6+s2+s7+s3+s8+s4+s9+s5+s10;
				couts[i]=s1+s6+s2+s7+s3+s8+s4+s9+s5;
				System.out.println(cout);
				sum[i]=eval(couts[i]);
				result=sc.nextInt();
				if(result!=sum[i]) {
					wrong[wrongnum]=cout;
					wrongnum+=1;
				}
			}
				System.out.println("您的错题集为:");
				for(i=0;i<wrongnum;i++) {
					System.out.println(wrong[i]);
				}
				do {
				System.out.println("错题重练请按1,退出请按0");
				choice=sc.nextInt();
				if(choice==1) {
					int result;
					for(i=0;i<wrongnum;i++) {
						int wrongn=1;//记录错误次数
						System.out.println(wrong[i]);
						result=sc.nextInt();
						if(result==sum[i+1]) {
							System.out.println("回答正确,该题错误次数为"+wrongn);
						}
						else {
							wrongn+=1;
							System.out.println("回答错误,该题错误次数为"+wrongn);
						}
					}
				}
		}while(choice==1);
	}
  }		
}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int grade,num1,num2,judge;
		Scanner sc=new Scanner(System.in);
		System.out.println("请依次输入年级、出题个数、操作数范围:");
		System.out.println("(注:二年级操作数范围不超过100,三、四年级操作数范围不超过1000)");
		grade=sc.nextInt();
		num1=sc.nextInt();
		num2=sc.nextInt();
		if(grade==2&&num2>100) {
			System.out.println("操作数范围不符合规范,已退出答题!");
			System.exit(0);
		}
		else if(grade==3&&num2>1000) {
			System.out.println("操作数范围不符合规范,已退出答题!");
			System.exit(0);
		}
		else if(grade==4&&num2>1000) {
			System.out.println("操作数范围不符合规范,已退出答题!");
			System.exit(0);
		}
		else {
		exercise(grade,num1,num2);
		}
	}
}
原文:https://www.cnblogs.com/zyj3955/p/13832295.html