实现四则运算
2017-03-06 20:12
190 查看
importjava.util.Scanner; importjavax.script.ScriptEngine; importjavax.script.ScriptEngineManager; importjavax.script.ScriptException; publicclasshh{ publicstaticvoidmain(String[]args){ for(intk1=0;k1<100;k1++){ ScriptEngineManagersem=newScriptEngineManager(); ScriptEngineengine=sem.getEngineByExtension("js");//计算方法 Scannerin=newScanner(System.in); Stringl; intk=0; inty=0; inta1,a2,a3,a4; Stringl1,l2,l3; inta=Integer.parseInt(args[0]); for(inti=0;i<a;i++){ l=""; intb=0; Strings=null; intx=1+(int)(Math.random()*9); intx2=(int)(Math.random()*4); switch(x2){ case0:s="-";break; case1:s="+";break; case2:s="*";break; case3:s="/";break; } l1=s; intx3=1+(int)(Math.random()*9); l=l+x+s+x3; intx4=(int)(Math.random()*4); switch(x4){ case0:s="-";break; case1:s="+";break; case2:s="*";break; case3:s="/";break; } l2=s; intx5=1+(int)(Math.random()*9); l=l+s+x5; intx6=(int)(Math.random()*4); switch(x6){ case0:s="-";break; case1:s="+";break; case2:s="*";break; case3:s="/";break; } l3=s; intx7=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+")"+""; }elseif(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; } }//除法方法的重新编写 Objectresult=null; try{ result=engine.eval(l); }catch(ScriptExceptione1){ e1.printStackTrace(); } Objectresult1=null; System.out.println("请输入你的答案"); Stringn=in.next(); try{ result1=engine.eval(n); }catch(ScriptExceptione){ System.out.println("你输入的答案有误"); System.out.println("请输入你的答案"); Stringn1=in.next(); try{ result1=engine.eval(n1); }catch(ScriptExceptione1){ System.out.println("请不要乱输入"); System.out.println("请输入你的答案"); Stringn2=in.next(); try{ result1=engine.eval(n2); }catch(ScriptExceptione2){ System.out.println("最后一次输入"); System.out.println("请输入你的答案"); Stringn3=in.next(); try{ result1=engine.eval(n3); }catch(ScriptExceptione3){ 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-n10
二、分析
看到题目第一印象是要随机产生题目,所以会用到Math.random()产生随机数,用4个数字来代表+,−,×,÷;
第二应该是要能够接受和提示用户输入答案,所以会用到Scanner方法,以及显示方式;
要能够对产生的随机题目进行计算,所以会用到
ScriptEngineManagersem=newScriptEngineManager();
ScriptEngineengine=sem.getEngineByExtension("js");
Objectresult=null;
try{
result=engine.eval(l);(会产生异常)
}catch(ScriptExceptione1){
e1.printStackTrace();
}
由于上面的方法产生的数字不能保留分数,所以把答案也进行了上面那种方法处理,能保证答案的正确性;
3设计实现
4.代码说明
1)除法的运算的结果会用误差,所以尽量自己在定义一下但是不是现实在题目上而是结果。
if(l1.equals("/")&&l3.equals("/")){
if(l2.equals("+")||l2.equals("-")){
l="("+a1+"*"+a4+"+"+a2+"*"+a3+")"+"/"+"("+a3+"*"+a4+")"+"";
}elseif(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)差生随机的题目
intx=1+(int)(Math.random()*9);
intx2=(int)(Math.random()*4);
switch(x2){
case0:s="-";break;
case1:s="+";break;
case2:s="*";break;
case3:s="/";break;
}
intx3=1+(int)(Math.random()*9);
l=l+x+s+x3;
intx4=(int)(Math.random()*4);
switch(x4){
case0:s="-";break;
case1:s="+";break;
case2:s="*";break;
case3:s="/";break;
}
intx5=1+(int)(Math.random()*9);
l=l+s+x5;
intx6=(int)(Math.random()*4);
switch(x6){
case0:s="-";break;
case1:s="+";break;
case2:s="*";break;
case3:s="/";break;
}
intx7=1+(int)(Math.random()*9);
l=l+s+x7;
3)计算方式
ScriptEngineManagersem=newScriptEngineManager();
ScriptEngineengine=sem.getEngineByExtension("js");
Objectresult=null;
try{
result=engine.eval(l);
}catch(ScriptExceptione1){
e1.printStackTrace();
}
4)对输入有异常的进行处理
Objectresult1=null;
System.out.println("请输入你的答案");
Stringn=in.next();
try{
result1=engine.eval(n);
}catch(ScriptExceptione){
System.out.println("你输入的答案有误");
System.out.println("请输入你的答案");
Stringn1=in.next();
try{
result1=engine.eval(n1);
}catch(ScriptExceptione1){
System.out.println("请不要乱输入");
System.out.println("请输入你的答案");
Stringn2=in.next();
try{
result1=engine.eval(n2);
}catch(ScriptExceptione2){
System.out.println("最后一次输入");
System.out.println("请输入你的答案");
Stringn3=in.next();
try{
result1=engine.eval(n3);
}catch(ScriptExceptione3){
break;
}
}
}
}
5.测试运行
二、PSP的展示
PSP2.1 | PersonalSoftwareProcessStages | Time(%)SeniorStudent | Time(%) |
Planning | 计划 | 8 | 3 |
Estimate | 估计这个任务需要多少时间 | 8 | 3 |
Development | 开发 | 82 | 94 |
·Analysis | 需求分析(包括学习新技术) | 6 | 10 |
DesignSpec | 生成设计文档 | 5 | 3 |
DesignReview | 设计复审 | 4 | 3 |
CodingStandard | 代码规范 | 3 | 3 |
Design | 具体设计 | 10 | 8 |
Coding | 具体编码 | 36 | 38 |
CodeReview | 代码复审 | 7 | 8 |
Test | 测试(自我测试,修改代码,提交修改 | 13 | 19 |
Reporting | 报告 | 9 | 9 |
测试报告 | 3 | 3 | |
计算工作量 | 2 | 2 | |
并提出过程改进计划 | 3 | 3 |
刚开始做的时候总是不断在扩展刚开始想的方法,由于不是很懂计算器的算法,所以百度了一下,并且运用了该方法,还有最后想到了用户是否做完了是否还有继续做题。遇到了不知道只能在CMD上面运行,和老师讨论并且解决了,在老师的提醒下发行,有/号的情况下,答案会出错所以,对了/进行了修改。测试的时候发现还有些错误,并修改了,所以此次让我明白了,测试的重要性就是帮我们完善代码。
相关文章推荐
- 使用隐式方式调用DLL实现浮点数的四则运算
- JAVA实现四则运算
- Shell编程简单实现四则运算
- 用Android NDK实现四则运算
- <DataStructure_1>用栈实现四则运算(c语言)
- C#实现eval 进行四则运算
- 栈实现带括号的浮点型四则运算C++
- java 实现带括号的加减乘除四则运算
- C#实现eval 进行四则运算(有码)
- 汇编实现的加减乘除四则运算
- java中FOR循环实现累加、四则运算
- 用switch-case语句实现两个数的简单四则运算
- c++实现四则运算
- 【栈】控制台计算器实现四则运算
- C/C++ 实现整数四则运算
- 数据结构,C语言实现四则运算
- 用栈实现四则运算
- php实现四则运算
- 逆波兰式实现四则运算表达式计算器支持括号、十六进制
- 数据结构实验之实现两个复数的四则运算