練習一升級及分析

51馮美欣max發表於2015-03-29
  1 //20150324 練習1 
  2 import java.util.*;
  3 public class exercise {
  4     static int a,b;
  5     static char[]ch={'+','-','*','/'};
  6     static Scanner in=new Scanner(System.in);
  7     static int number,right=0;
  8     static double answer;
  9     static int total=0;
 10 
 11     public static void main(String[] args)
 12  {                
 13         System.out.println("數學四則運算題目 \t注意例子:(3/4)為真分數四分之三\n測試開始\n \n列印題目數量:");
 14         number=in.nextInt();//出題數目
 15         for(int i=0;i<number;i++)    
 16         {    int n = new Random().nextInt(5);//獲取運算的方式0—— +    1—— -    2—— *    3—— /
 17             if(n==0 || n==2 || n==3 || n==1)//int型的運算
 18             {
 19                 a = new Random().nextInt(100);
 20                 b =new Random().nextInt(100)+1;//獲取式子的運算隨機數
 21                 System.out.print(a+""+ch[n]+""+b+"=");//輸出式子
 22         
 23                 answer=in.nextDouble();//獲取答案處理使用者輸入
 24                 //判斷答案是否正確的方法
 25                judge(n);//判斷是否正確
 26               }
 27             else if(n==4)//含有真分數的運算
 28              {
 29                 int c = 0;
 30                 int d=0;
 31                 int e=0;
 32                 int f=0;
 33                 int fm=0;
 34                 int fz=0;//答案的分子分母
 35                 boolean t = true;
 36                 while(t==true)//判斷並輸出真分數
 37                 {
 38                      c = new Random().nextInt(10);
 39                      d =new Random().nextInt(10);//獲取式子的運算隨機數
 40                     if(c<d)
 41                         t=false;
 42                     
 43                 }
 44 
 45                 t=true;
 46                 while(t==true)//判斷並輸出真分數
 47                 {
 48                      e =new Random().nextInt(10);
 49                      f =new Random().nextInt(10);//獲取式子的運算隨機數
 50                     if(e<f)
 51                         t=false;
 52                     
 53                 }
 54                 n=new Random().nextInt(4);
 55                 System.out.print("("+c+"/"+d+")"+ch[n]+"("+e+"/"+f+")"+"=");
 56                 answer=in.nextInt();
 57                 //真分數運算的判斷
 58                 if(n==0)//加法
 59                 {    
 60                     fm=d*f;
 61                     fz=(c*f)+(e*d);
 62                     if(answer==(fz/fm))
 63                     {
 64                         System.out.printf("答對了!!\n");
 65                         right=right+1;
 66                     }
 67                     else
 68                         System.out.println("答錯了!!答案是"+(fz/fm));
 69                 }
 70                 else if(n==1)//減法
 71                 {    
 72                     fm=d*f;
 73                     fz=(c*f)-(e*d);
 74                     if(answer==(fz/fm))
 75                     {
 76                         System.out.printf("答對了!!\n");
 77                         right=right+1;
 78                     }
 79                     else
 80                         System.out.println("答錯了!!答案是"+(fz/fm));
 81                 }
 82                 else if(n==2)//乘法
 83                 {    
 84                     fz=c*e;
 85                     fm=d*f;
 86                     if(answer==fz*fm)
 87                     {
 88                         System.out.printf("答對了!!\n");
 89                         right=right+1;
 90                     }
 91                     else
 92                         System.out.println("答錯了!!答案是"+(fz*fm));
 93                 }
 94                 else if(n==3)//除法
 95                 {    
 96                     fz=c*f;
 97                     fm=d*e;
 98                     int ans=(int)(fz/fm);
 99                     if(answer==ans)
100                     {
101                         System.out.printf("答對了!!\n");
102                         right=right+1;
103                     }
104                     else
105                         System.out.println("答錯了!!答案是"+(fz/fm));
106                 }
107                  
108                  
109              }
110             
111         }
112         //打分統計
113         System.out.print("總共"+number+"題"+"\t答對了"+right+"題\n");
114         System.out.print("你的分數是:\t");
115         if(right==number)
116             System.out.print("100分");
117         else 
118             System.out.print((total=right*(100/number))+"分");
119         
120     }
121     static void judge(int n)//判斷對錯
122     {
123     
124         if(n==0)
125         {    
126             if(answer==a+b)
127             {
128                 System.out.printf("答對了!!\n");
129                 right=right+1;
130             }
131             else
132                 System.out.println("答錯了!!答案是"+(a+b));
133         }
134         else if(n==1)
135         {    
136             if(answer==a-b)
137             {
138                 System.out.printf("答對了!!\n");
139                 right=right+1;
140             }
141             else
142                 System.out.println("答錯了!!答案是"+(a-b));
143         }
144         else if(n==2)
145         {    
146             if(answer==a*b)
147             {
148                 System.out.printf("答對了!!\n");
149                 right=right+1;
150             }
151             else
152                 System.out.println("答錯了!!答案是"+(a*b));
153         }
154         else if(n==3)
155         {    
156             int ans=(int)(a/b);
157             if(answer==ans)
158             {
159                 System.out.printf("答對了!!\n");
160                 right=right+1;
161             }
162             else
163                 System.out.println("答錯了!!答案是"+(a/b));
164         }
165     }
166 }

執行情況:1.執行後臺。如圖:

2.判斷對錯。如圖:

3.記分情況。每題分值會因為提數不同而不同,總分是100.如圖

待改進的情況,問題:

1.除法運算只能將結果為整型;如15/16=  如果答案是0就正確,應該為0.93才對,除法結果處理不合理,而且也只侷限整型中的運算;

2.針對含有真分數的運算,暫時只能讓使用者輸入最終的答案,如果輸入真分數答案會出錯。如圖

相關文章