Java学习日报10.4
今日学习内容:
四则运算课堂测试二:
要求:
1、定义方法验证题目是否重复;并将出题参数用方法定义。
2、定义随机数生成器方法,根据出题参数(出题个数、操作数的个数、确定操作数的取值范围)生成全部的随机操作数。
1 import java.util.Scanner; 2 import java.util.Random; 3 public class count_number { 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("请同学现在进行答题!(除法请保留3位小数)"); 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 right=r; 135 wrong=w; 136 } 137 } 138 /*主函数*/ 139 public static void main(String []args) { 140 141 boolean flag=true; 142 int s1; 143 String m="s"; 144 setQuestionParameter(); 145 146 for(i=0;i<questionNumber;i++) { 147 birth(); 148 s1=(int)(Math.random()*4); 149 flag=judge(i); 150 if(flag) { 151 birth(); 152 } 153 if(s1==0) { 154 m="+"; 155 operator[i]=0; 156 } 157 if(s1==1) { 158 159 m="-"; 160 operator[i]=1; 161 } 162 if(s1==2) { 163 if(a1[i]*a2[i]<100) { 164 165 m="*"; 166 operator[i]=2; 167 } 168 else { 169 m="*"; 170 birth(); 171 } 172 173 } 174 if(s1==3) { 175 m="/"; 176 operator[i]=3; 177 } 178 179 System.out.println(a1[i]+m+a2[i]+"="); 180 } 181 anserQuestionOnline(); 182 judgeRightOrWrong(); 183 System.out.println("正确个数:"+right); 184 System.out.println("错误个数:"+wrong); 185 System.out.println("正确率:"+((double)right/questionNumber)*100+"%"); 186 System.out.println("错误率:"+((double)wrong/questionNumber)*100+"%"); 187 wrongQuestionSet(); 188 System.out.println("是否选择对错题进行重做?yes/no"); 189 String str=in.next(); 190 String str1="yes"; 191 String str2="no"; 192 if(str.equals(str1)) { 193 194 while(wrong!=0) { 195 String M="1"; 196 for(int i=0;i<wrong;i++) { 197 int j=s[i]; 198 if(operator[j]==0) 199 M="+"; 200 if(operator[j]==1) 201 M="-"; 202 if(operator[j]==2) 203 M="*"; 204 if(operator[j]==3) 205 M="/"; 206 System.out.println(a1[j]+M+a2[j]+"="); 207 System.out.println("请进行重做:"); 208 sum[j]=in.nextDouble(); 209 } 210 judgeRightOrWrong(); 211 } 212 if(wrong==0) 213 System.out.println("恭喜全部回答正确!答题结束,欢迎下次使用!"); 214 } 215 216 if(str.equals(str2)) { 217 System.out.println("答题结束,欢迎下次使用!"); 218 System.exit(0); 219 } 220 } 221 222 223 }
测试结果: