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 }

 

测试结果:

        

 

 

 

 

     

 

posted on 2020-10-04 21:49  桑榆非晚柠月如风  阅读(176)  评论(0编辑  收藏  举报