实现四则运算


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上面运行,和老师讨论并且解决了,在老师的提醒下发行,有/号的情况下,答案会出错所以,对了/进行了修改。测试的时候发现还有些错误,并修改了,所以此次让我明白了,测试的重要性就是帮我们完善代码。

posted @ 2017-03-06 20:12  尤少辉  阅读(253)  评论(3编辑  收藏  举报