import java.util.Scanner; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class hh { public static void main(String[] args){ for(int k1=0;k1<100;k1++){ ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByExtension("js");//计算方法 Scanner in=new Scanner(System.in); String l; int k=0; int y=0; int a1,a2,a3,a4; String l1,l2,l3; int a=Integer.parseInt(args[0]); for(int i=0;i<a;i++){ l=""; int b=0; String s = null; int x=1+(int)(Math.random()*9); int x2=(int)(Math.random()*4); switch(x2){ case 0:s="-";break; case 1:s="+";break; case 2:s="*";break; case 3:s="/";break; } l1=s; int x3=1+(int)(Math.random()*9); l=l+x+s+x3; int x4=(int)(Math.random()*4); switch(x4){ case 0:s="-";break; case 1:s="+";break; case 2:s="*";break; case 3:s="/";break; } l2=s; int x5=1+(int)(Math.random()*9); l=l+s+x5; int x6=(int)(Math.random()*4); switch(x6){ case 0:s="-";break; case 1:s="+";break; case 2:s="*";break; case 3:s="/";break; } l3=s; int x7=1+(int)(Math.random()*9); l=l+s+x7; a1=x; a2=x3; a3=x5; a4=x7; System.out.println(l);//产生随机题目 if(l1.equals("/")&&l3.equals("/")){ if(l2.equals("+")||l2.equals("-")){ l="("+a1+"*"+a4+"+"+a2+"*"+a3+")"+"/"+"("+a3+"*"+a4+")"+""; }else if(l2.equals("*")){ l="("+a1+"*"+a3+")"+"/"+"("+a2+"*"+a4+")"+""; }else{ l=a1+"/"+"("+a2+"*"+a3+"*"+a4+")"+""; } } if(l1.equals("/")&&!l3.equals("/")){ if(l2.equals("*")&&l3.equals("+")){ l=a1+"*"+a3+"/"+a2+l3+a4; }if(l2.equals("*")&&l3.equals("-")){ l="("+a1+l2+a3+l3+a4+l2+a2+")"+l1+a2; } if(l2.equals("/")&&l3.equals("*")){ l=a1+l3+a4+l2+"("+a2+"*"+a3+")"; }if(l2.equals("/")&&l3.equals("+")){ l=a1+l1+"("+a2+"*"+a3+")"+l3+a4; }if(l2.equals("/")&&l3.equals("-")){ l="("+a1+l3+a4+"*"+a2+"*"+a3+")"+l1+"("+a2+"*"+a3+")"; }if(l2.equals("-")&&l3.equals("*")){ l="("+a1+l2+"("+a3+l3+a4+")"+"*"+a2+")"+l1+a2; } } if(l2.equals("/")){ if(l1.equals("-")&&l3.equals("*")){ l="("+a1+l3+a3+l1+a2+l3+a4+")"+l2+a3; }if(l1.equals("-")&&l3.equals("/")){ l="("+a1+"*"+a3+"*"+a4+l1+a2+")"+l2+a3+"*"+a4; }if(l1.equals("-")&&l3.equals("+")){ l="("+a1+"*"+a3+l1+a2+")"+l2+a3+l3+a4; }if(l1.equals("-")&&l3.equals("-")){ l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3; }if(l1.equals("*")&&l3.equals("-")){ l="("+a1+l1+a2+l3+a3+l1+a4+")"+l2+a3; }if(l1.equals("/")&&l3.equals("-")){ l="("+a1+l3+a2+"*"+a3+"*"+a4+")"+l2+"("+a2+"*"+a3+")"; }if(l1.equals("+")&&l3.equals("-")){ l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3; } } if(l3.equals("/")){ if(l1.equals("-")&&l2.equals("*")){ l="("+a1+l2+a4+l1+a2+l2+a4+")"+l3+a4; }if(l1.equals("-")&&l2.equals("-")){ l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4; }if(l1.equals("-")&&l2.equals("+")){ l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4; }if(l1.equals("*")&&l2.equals("-")){ l="("+a1+l1+a2+l1+a4+l2+a3+")"+l3+a4; } }//除法方法的重新编写 Object result = null; try { result = engine.eval(l); } catch (ScriptException e1) { e1.printStackTrace(); } Object result1 = null; System.out.println("请输入你的答案"); String n=in.next(); try { result1 = engine.eval(n); } catch (ScriptException e) { System.out.println("你输入的答案有误"); System.out.println("请输入你的答案"); String n1=in.next(); try { result1 = engine.eval(n1); } catch (ScriptException e1) { System.out.println("请不要乱输入"); System.out.println("请输入你的答案"); String n2=in.next(); try { result1 = engine.eval(n2); } catch (ScriptException e2) { System.out.println("最后一次输入"); System.out.println("请输入你的答案"); String n3=in.next(); try { result1 = engine.eval(n3); } catch (ScriptException e3) { break; } } } }//对输入有异常的进行处理 if(result1.equals(result)){ System.out.println("输入正确"); System.out.println(result); k=k+1; }else{ System.out.println("输入不正确"); System.out.println(result); y=y+1; } }//判断对错,并且统计数目 System.out.println("你答对"+k+"题目;"+" "+"你答错"+ y+"题目"); } } }
coding.net地址:https://git.oschina.net/ysh0904/wl.git
一、此次题目要求
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
二、分析
看到题目第一印象是要随机产生题目,所以会用到Math.random()产生随机数,用4个数字来代表 +, −, ×, ÷;
第二应该是要能够接受和提示用户输入答案,所以会用到Scanner方法,以及显示方式;
要能够对产生的随机题目进行计算,所以会用到
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByExtension("js");
Object result = null;
try {
result = engine.eval(l);(会产生异常)
} catch (ScriptException e1) {
e1.printStackTrace();
}
由于上面的方法产生的数字不能保留分数,所以把答案也进行了上面那种方法处理,能保证答案的正确性;
3设计实现
4.代码说明
1)除法的运算的结果会用误差,所以尽量自己在定义一下但是不是现实在题目上而是结果。
if(l1.equals("/")&&l3.equals("/")){
if(l2.equals("+")||l2.equals("-")){
l="("+a1+"*"+a4+"+"+a2+"*"+a3+")"+"/"+"("+a3+"*"+a4+")"+"";
}else if(l2.equals("*")){
l="("+a1+"*"+a3+")"+"/"+"("+a2+"*"+a4+")"+"";
}else{
l=a1+"/"+"("+a2+"*"+a3+"*"+a4+")"+"";
}
}
if(l1.equals("/")&&!l3.equals("/")){
if(l2.equals("*")&&l3.equals("+")){
l=a1+"*"+a3+"/"+a2+l3+a4;
}if(l2.equals("*")&&l3.equals("-")){
l="("+a1+l2+a3+l3+a4+l2+a2+")"+l1+a2;
}
if(l2.equals("/")&&l3.equals("*")){
l=a1+l3+a4+l2+"("+a2+"*"+a3+")";
}if(l2.equals("/")&&l3.equals("+")){
l=a1+l1+"("+a2+"*"+a3+")"+l3+a4;
}if(l2.equals("/")&&l3.equals("-")){
l="("+a1+l3+a4+"*"+a2+"*"+a3+")"+l1+"("+a2+"*"+a3+")";
}if(l2.equals("-")&&l3.equals("*")){
l="("+a1+l2+"("+a3+l3+a4+")"+"*"+a2+")"+l1+a2;
}
}
if(l2.equals("/")){
if(l1.equals("-")&&l3.equals("*")){
l="("+a1+l3+a3+l1+a2+l3+a4+")"+l2+a3;
}if(l1.equals("-")&&l3.equals("/")){
l="("+a1+"*"+a3+"*"+a4+l1+a2+")"+l2+a3+"*"+a4;
}if(l1.equals("-")&&l3.equals("+")){
l="("+a1+"*"+a3+l1+a2+")"+l2+a3+l3+a4;
}if(l1.equals("-")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}if(l1.equals("*")&&l3.equals("-")){
l="("+a1+l1+a2+l3+a3+l1+a4+")"+l2+a3;
}if(l1.equals("/")&&l3.equals("-")){
l="("+a1+l3+a2+"*"+a3+"*"+a4+")"+l2+"("+a2+"*"+a3+")";
}if(l1.equals("+")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}
}
if(l3.equals("/")){
if(l1.equals("-")&&l2.equals("*")){
l="("+a1+l2+a4+l1+a2+l2+a3+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("-")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("+")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("*")&&l2.equals("-")){
l="("+a1+l1+a2+l1+a4+l2+a3+")"+l3+a4;
}
}
2)差生随机的题目
int x=1+(int)(Math.random()*9);
int x2=(int)(Math.random()*4);
switch(x2){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
int x3=1+(int)(Math.random()*9);
l=l+x+s+x3;
int x4=(int)(Math.random()*4);
switch(x4){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
int x5=1+(int)(Math.random()*9);
l=l+s+x5;
int x6=(int)(Math.random()*4);
switch(x6){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
int x7=1+(int)(Math.random()*9);
l=l+s+x7;
3)计算方式
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByExtension("js");
Object result = null;
try {
result = engine.eval(l);
} catch (ScriptException e1) {
e1.printStackTrace();
}
4)对输入有异常的进行处理
Object result1 = null;
System.out.println("请输入你的答案");
String n=in.next();
try {
result1 = engine.eval(n);
} catch (ScriptException e) {
System.out.println("你输入的答案有误");
System.out.println("请输入你的答案");
String n1=in.next();
try {
result1 = engine.eval(n1);
} catch (ScriptException e1) {
System.out.println("请不要乱输入");
System.out.println("请输入你的答案");
String n2=in.next();
try {
result1 = engine.eval(n2);
} catch (ScriptException e2) {
System.out.println("最后一次输入");
System.out.println("请输入你的答案");
String n3=in.next();
try {
result1 = engine.eval(n3);
} catch (ScriptException e3) {
break;
}
}
}
}
5.测试运行
二、PSP的展示
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
8 |
3 |
Estimate |
估计这个任务需要多少时间 |
8 |
3 |
Development |
开发 |
82 |
94 |
· Analysis |
需求分析 (包括学习新技术) |
6 |
10 |
Design Spec |
生成设计文档 |
5 |
3 |
Design Review |
设计复审 |
4 |
3 |
Coding Standard |
代码规范 |
3 |
3 |
Design |
具体设计 |
10 |
8 |
Coding |
具体编码 |
36 |
38 |
Code Review |
代码复审 |
7 |
8 |
Test |
测试(自我测试,修改代码,提交修改 |
13 |
19 |
Reporting |
报告 |
9 |
9 |
|
测试报告 |
3 |
3 |
|
计算工作量 |
2 |
2 |
|
并提出过程改进计划 |
3 |
3 |
三、小结
刚开始做的时候总是不断在扩展刚开始想的方法,由于不是很懂计算器的算法,所以百度了一下,并且运用了该方法,还有最后想到了用户是否做完了是否还有继续做题。遇到了不知道只能在CMD上面运行,和老师讨论并且解决了,在老师的提醒下发行,有/号的情况下,答案会出错所以,对了/进行了修改。测试的时候发现还有些错误,并修改了,所以此次让我明白了,测试的重要性就是帮我们完善代码。