首页 > 其他分享 >9.16课堂测试

9.16课堂测试

时间:2022-09-20 13:11:58浏览次数:49  
标签:truth 9.16 System int num static 测试 new 课堂

于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

相关文章