• 实现四则运算


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

  • 相关阅读:
    LIGHTSWITCH 的树控件设计!
    企业即时通信平台与在线办公!
    特殊符号网 http://www.teshufuhao.net/
    国内主要工作流厂商分析 (转)
    衣联网 http://www.eelly.com/ 中国最大的专业服装批发市场(广州)
    NET FrameWork & CLR & C# 运行基本原理
    通过负载均衡器+域名实现容灾切换(2)DNS解析过程理解
    SPAN和RSPAN概念
    【转】一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    SIP Recording(录制)相关协议
  • 原文地址:https://www.cnblogs.com/ysh09-04/p/6483886.html
Copyright © 2020-2023  润新知