于9.17完成。
import java.util.Scanner; import java.util.ArrayList; import java.util.Random; import java.math.BigInteger;
public class Calculates { static int n1; static int n2; static BigInteger n3; static ArrayList<String> eq = new ArrayList<>(); public static void main(String[] args) {
Getit(); Makenums(n1, n2, n3); error(n1); } public static void Getit(){ int num1,num2; BigInteger num3; Scanner sc = new Scanner(System.in); System.out.println("请输入出题的个数:"); num1 = sc.nextInt(); System.out.println("请输入操作数的个数:"); num2 = sc.nextInt(); System.out.println("请确定操作数的范围:"); num3 = sc.nextBigInteger(); n1=num1;n2=num2;n3=num3; } //判重 public static int Judgesame(ArrayList<String> str, String s) { int num = 0; for (int i = 0; i < str.size(); i++) { if(s.equals(str.get(i))) { num++; break; } } if(num == 0) { str.add(s); return 1; }else { return 0; } } //出题 public static void Makenums(int nu1,int nu2,BigInteger nu3){ Random rand = new Random(); Scanner sc = new Scanner(System.in); ArrayList<String> st = new ArrayList<>(); double sum=0; BigInteger []numbers = new BigInteger[nu2]; int []dsymbol = new int[nu2-1]; String []symbol = new String[nu2-1];
for(int i=0;i<nu1;i++){
for(int j=0;j<nu2;j++){ int MAX = 10; byte[] b = new byte[MAX]; rand.nextBytes(b); BigInteger bigInt = new BigInteger(b); bigInt = bigInt.abs(); numbers[j] = bigInt; } for(int k=0;k<(nu2-1);k++){ dsymbol[k] = rand.nextInt(4); switch (dsymbol[k]) { case 0: symbol[k] = "+"; break; case 1: symbol[k] = "-"; break; case 2: symbol[k] = "*"; break; case 3: symbol[k] = "/"; break; } } StringBuffer strB = new StringBuffer(); for(int e=0;e<nu2;e++){ if(e==nu2-1){ strB.append(numbers[e]); }else{ strB.append(numbers[e]).append(symbol[e]); } } if(i==0) { st.add(strB.toString()); System.out.println(st.get(i) + "="); BigInteger answer1; answer1 = sc.nextBigInteger(); if(Judgeanswer(numbers, symbol, answer1, n2)){ System.out.println("正确"); sum++; }else{ System.out.println("错误"); eq.add(strB.toString()); } }else { int judge = Judgesame(st, strB.toString()); if (judge == 1) { System.out.println(st.get(i) + "="); BigInteger answer2; answer2 = sc.nextBigInteger(); if(Judgeanswer(numbers, symbol, answer2, n2)){ System.out.println("正确"); sum++; }else{ System.out.println("错误"); eq.add(strB.toString()); } } }
} double correct = sum/nu1; System.out.println("正确率为:"+correct); } //判断正误 public static boolean Judgeanswer(BigInteger num[],String sy[],BigInteger myanswer,int num2){ BigInteger truth=new BigInteger("0"); truth = truth.add(num[0]); for(int e=0;e<(num2-1);e++){ for(int l=1;l<num2;l++){ if(sy[e] == "+"){ truth = truth.add(num[l]); } else if(sy[e] == "-"){ truth = truth.subtract(num[l]); } else if(sy[e] == "*"){ truth = truth.multiply(num[l]); } else if(sy[e] == "/"){ truth = truth.divide(num[l]); } } } if(myanswer == truth){ return true; } else{ return false; } } public static void error(int nu1){ System.out.println("错题如下"); for(int i=0;i<nu1;i++){ System.out.println(eq.get(i) + "="); } } } 这个是超大数 下面是精确数,实际上偷了一个懒,没有写在一个里面
import java.util.Scanner; import java.util.ArrayList; import java.util.Random; import java.math.BigDecimal;
public class Calculate2 { static int n1; static int n2; static BigDecimal n3; static ArrayList<String> eq = new ArrayList<>(); public static void main(String[] args) {
Getit(); Makenums(n1, n2, n3); error(n1); } public static void Getit(){ int num1,num2; BigDecimal num3; Scanner sc = new Scanner(System.in); System.out.println("请输入出题的个数:"); num1 = sc.nextInt(); System.out.println("请输入操作数的个数:"); num2 = sc.nextInt(); System.out.println("请确定操作数的范围:"); num3 = sc.nextBigDecimal(); n1=num1;n2=num2;n3=num3; } //判重 public static int Judgesame(ArrayList<String> str, String s) { int num = 0; for (int i = 0; i < str.size(); i++) { if(s.equals(str.get(i))) { num++; break; } } if(num == 0) { str.add(s); return 1; }else { return 0; } } //出题 public static void Makenums(int nu1,int nu2,BigDecimal nu3){ Random rand = new Random(); Scanner sc = new Scanner(System.in); ArrayList<String> st = new ArrayList<>(); double sum=0; BigDecimal []numbers = new BigDecimal[nu2]; int []dsymbol = new int[nu2-1]; String []symbol = new String[nu2-1];
for(int i=0;i<nu1;i++){
for(int j=0;j<nu2;j++){ float maxF = nu3.floatValue(); BigDecimal Int = new BigDecimal(Math.random() * (maxF - 0) + 0); // BigDecimal bigInt = new BigDecimal(b); // bigInt = bigInt.abs(); numbers[j] = Int; } for(int k=0;k<(nu2-1);k++){ dsymbol[k] = rand.nextInt(4); switch (dsymbol[k]) { case 0: symbol[k] = "+"; break; case 1: symbol[k] = "-"; break; case 2: symbol[k] = "*"; break; case 3: symbol[k] = "/"; break; } } StringBuffer strB = new StringBuffer(); for(int e=0;e<nu2;e++){ if(e==nu2-1){ strB.append(numbers[e]); }else{ strB.append(numbers[e]).append(symbol[e]); } } if(i==0) { st.add(strB.toString()); System.out.println(st.get(i) + "="); BigDecimal answer1; answer1 = sc.nextBigDecimal(); if(Judgeanswer(numbers, symbol, answer1, n2)){ System.out.println("正确"); sum++; }else{ System.out.println("错误"); eq.add(strB.toString()); } }else { int judge = Judgesame(st, strB.toString()); if (judge == 1) { System.out.println(st.get(i) + "="); BigDecimal answer2; answer2 = sc.nextBigDecimal(); if(Judgeanswer(numbers, symbol, answer2, n2)){ System.out.println("正确"); sum++; }else{ System.out.println("错误"); eq.add(strB.toString()); } } }
} double correct = sum/nu1; System.out.println("正确率为:"+correct); } //判断正误 public static boolean Judgeanswer(BigDecimal num[],String sy[],BigDecimal myanswer,int num2){ BigDecimal truth=new BigDecimal("0"); truth = truth.add(num[0]); for(int e=0;e<(num2-1);e++){ for(int l=1;l<num2;l++){ if(sy[e] == "+"){ truth = truth.add(num[l]); } else if(sy[e] == "-"){ truth = truth.subtract(num[l]); } else if(sy[e] == "*"){ truth = truth.multiply(num[l]); } else if(sy[e] == "/"){ truth = truth.divide(num[l]); } } } if(myanswer == truth){ return true; } else{ return false; } } public static void error(int nu1){ System.out.println("错题如下"); for(int i=0;i<nu1;i++){ System.out.println(eq.get(i) + "="); } } } 标签:truth,9.16,System,int,num,static,测试,new,课堂 From: https://www.cnblogs.com/rsy-bxf150/p/16710662.html