Java學習日報10.4
阿新 • • 發佈:2020-10-05
今日學習內容:
1 import java.util.Scanner; 2 import java.util.Random; 3 public class countNumber { 4 static int number=1000,i=0; 5 static int []a1=new int[number]; 6 static int []a2=new int[number]; 7 static double []sum=new double[number]; 8 static int []s=new int[number]; //錯題序號 9 static int []operator=new int[number]; //運算子 10 static int questionNumber=0; 11 static int operands=0; 12 static int valueRange1=0; 13 static int valueRange2=0; 14 static int right=0; 15 static int wrong=0; 16 static Scanner in=new Scanner(System.in); 17 /*判斷是否重複*/ 18 public static boolean judge(int i) { 19 boolean y=false; 20 if(i!=0) { 21 int k=i; 22 for(int j=i;j>=0;j--) { 23 if(a1[k]==a1[j]&&a2[k]==a2[j]) 24 y=true; 25 else 26 y=false; 27 } 28 } 29 return y; 30 } 31 32 /*生成一個隨機數*/ 33 public static void birth() { 34 a1[i]=valueRange1+(int)(Math.random()*((valueRange2-valueRange1)+1)); 35 a2[i]=valueRange1+(int)(Math.random()*((valueRange2-valueRange1)+1)); 36 37 } 38 39 /*出題引數*/ 40 public static void setQuestionParameter() { 41 System.out.println("請輸入題目的個數:"); 42 questionNumber=in.nextInt(); 43 System.out.println("請輸入運算元的個數:"); 44 operands=in.nextInt(); 45 System.out.println("請輸入運算元取值範圍的最小值:"); 46 valueRange1=in.nextInt(); 47 System.out.println("請輸入運算元取值範圍的最大值:"); 48 valueRange2=in.nextInt(); 49 } 50 51 /*線上答題*/ 52 public static void anserQuestionOnline() { 53 System.out.println("*************************************"); 54 System.out.println("請同學現在進行答題!"); 55 System.out.println("*************************************"); 56 for(int i=0;i<questionNumber;i++) { 57 sum[i]=in.nextDouble(); 58 } 59 System.out.println("答題結束!"); 60 System.out.println("*************************************"); 61 } 62 63 /*錯題集*/ 64 public static void wrongQuestionSet() { 65 System.out.println("*************************************"); 66 System.out.println("錯題集:"); 67 System.out.println("*************************************"); 68 String M="1"; 69 for(int i=0;i<wrong;i++) { 70 int j=s[i]; 71 if(operator[j]==0) 72 M="+"; 73 if(operator[j]==1) 74 M="-"; 75 if(operator[j]==2) 76 M="*"; 77 if(operator[j]==3) 78 M="/"; 79 System.out.println(a1[j]+M+a2[j]+"="+sum[j]); 80 } 81 } 82 /*判斷結果是否正確*/ 83 public static void judgeRightOrWrong() { 84 int r=0,w=0; 85 for(int i=0;i<questionNumber;i++) { 86 switch(operator[i]) { 87 case 0:{ 88 if((a1[i]+a2[i]-sum[i])<1e-3) 89 r++; 90 else { 91 s[w]=i; 92 w++; 93 94 } 95 right=r; 96 wrong=w; 97 break; 98 } 99 case 1:{ 100 if((a1[i]-a2[i]-sum[i])<1e-3) 101 r++; 102 else { 103 w++; 104 s[w]=i; 105 } 106 right=r; 107 wrong=w; 108 break; 109 } 110 case 2:{ 111 if((a1[i]*a2[i]-sum[i])<1e-3) 112 r++; 113 else { 114 w++; 115 s[w]=i; 116 } 117 right=r; 118 wrong=w; 119 break; 120 } 121 case 3:{ 122 if(((double)a1[i]/a2[i]-sum[i])<1e-3) 123 r++; 124 else { 125 w++; 126 s[w]=i; 127 } 128 right=r; 129 wrong=w; 130 break; 131 } 132 133 } 134 } 135 } 136 /*主函式*/ 137 public static void main(String []args) { 138 139 boolean flag=true; 140 int s; 141 String m="s"; 142 setQuestionParameter(); 143 144 for(i=0;i<questionNumber;i++) { 145 birth(); 146 s=(int)(Math.random()*4); 147 flag=judge(i); 148 if(flag) { 149 birth(); 150 } 151 if(s==0) { 152 m="+"; 153 operator[i]=0; 154 } 155 if(s==1) { 156 157 m="-"; 158 operator[i]=1; 159 } 160 if(s==2) { 161 if(a1[i]*a2[i]<100) { 162 163 m="*"; 164 operator[i]=2; 165 } 166 else { 167 m="*"; 168 birth(); 169 } 170 171 } 172 if(s==3) { 173 m="/"; 174 operator[i]=3; 175 } 176 177 System.out.println(a1[i]+m+a2[i]+"="); 178 } 179 anserQuestionOnline(); 180 judgeRightOrWrong(); 181 System.out.println("正確個數:"+right); 182 System.out.println("錯誤個數:"+wrong); 183 System.out.println("正確率:"+((double)right/questionNumber)*100+"%"); 184 System.out.println("錯誤率:"+((double)wrong/questionNumber)*100+"%"); 185 wrongQuestionSet(); 186 System.out.println("是否選擇對錯題進行重做?yes/no"); 187 String str=in.nextLine(); 188 189 if(str=="yes") { 190 String M="1"; 191 for(int i=0;i<wrong;i++) { 192 193 int j=s[i]; 194 if(operator[j]==0) 195 M="+"; 196 if(operator[j]==1) 197 M="-"; 198 if(operator[j]==2) 199 M="*"; 200 if(operator[j]==3) 201 M="/"; 202 System.out.println(a1[j]+M+a2[j]+"="); 203 } 204 } 205 } 206 207 208 }
測試結果: