练习一升级及分析
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.针对含有真分数的运算,暂时只能让用户输入最终的答案,如果输入真分数答案会出错。如图