您的位置:首页 > 其它

实现四则运算

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.1PersonalSoftwareProcessStages

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上面运行,和老师讨论并且解决了,在老师的提醒下发行,有/号的情况下,答案会出错所以,对了/进行了修改。测试的时候发现还有些错误,并修改了,所以此次让我明白了,测试的重要性就是帮我们完善代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: