zoukankan      html  css  js  c++  java
  • 20175316盛茂淞 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周(6)

    20175316与20175329 结对编程练习_四则运算(第二周)

    1、需求分析

    实现一个命令行程序,要求:

    • 自动生成指定数量的小学四则运算题目(加、减、乘、除)

    • 支持整数

    • 统计正确率

    • 支持多运算符

    • 题目去重

    • 支持真分数

    • 处理生成题目并输出到文件

    • 完成题目后从文件读入并判题

    2、设计思路(UML类图)

    3、实现过程中的关键代码解释

    • 算法(以加法为例子)
    public Shu add(Shu op2)
        {
            int commonDenominator = denominator * op2.getDenominator();
            int numerator1 = numerator * op2.getDenominator();
            int numerator2 = op2.getNumerator() * denominator;
            int sum = numerator1 + numerator2;
            return new Shu (sum, commonDenominator);
        }
    
    • 转换为后缀
    public void evaluate(String expr) {
            String token;
            StringTokenizer tokenizer = new StringTokenizer(expr);
            while (tokenizer.hasMoreTokens()) {
                token = tokenizer.nextToken();
                if (token.equals("("))
                    stack1.push(token);
                else if (token.equals("+") || token.equals("-")) {
                    while (!stack1.empty()){
                        if(stack1.peek().equals("(")){
                            break;
                        }else list1.add(stack1.pop());
                    }
                    stack1.push(token);
                }else if (token.equals("*") || token.equals("/")) {
                    if(!stack1.empty()) {
                        if (stack1.peek().equals("*") || stack1.peek().equals("/")) {
                            list1.add(stack1.pop());
                            stack1.push(token);
                        } else stack1.push(token);
                    }else stack1.push(token);
                }
                else if (token.equals(")")) {
                    while (!stack1.peek().equals("(")) {
                        list1.add(stack1.pop());
                    }
                    stack1.pop();
                }else list1.add(token);
            }
            while (!stack1.empty()) {
                list1.add(stack1.pop());
            }
            ListIterator<String > li = list1.listIterator();
            while (li.hasNext()) {
                Message += li.next() + " ";
                li.remove();
            }
            message = Message;
        }
    
    • 判断正误
    String tmp = br.readLine();
                if (tmp != null) {
                    if (tmp.indexOf("=") != -1) {
                        ExpreNum++;
                        StringTokenizer tokenizer = new StringTokenizer(tmp, "=");
                        infixToSuffix.evaluate(tokenizer.nextToken());
                        list3.add(tmp);
                        if ((" " + cal.evaluate(infixToSuffix.getMessage())).equals(tokenizer.nextToken())) {
                            list3.add("正确");
                            trues++;
                        } else {
                            list3.add("错误");
                            list3.add("正确答案为" + cal.evaluate(infixToSuffix.getMessage()));
                        }
                    } else list3.add(tmp);
                } else break;
    
    • 生成文件(.txt)
    Biaodashi pra = new Biaodashi();
            try {
                pra.outFile("SIZEYUNSUAN.txt","Practice.txt");
            }catch (IOException e){
                System.out.println(e);
            }
    

    4、运行过程截图

    • 简体中文
    • 边界值测试

    5、代码

    https://gitee.com/shengmaosong/java-besti-20175316/tree/master/docs7/sizeyunsuan2

    6、遇到的困难及解决方法

    • 问题: 生成题目时,我输入想要做的题目难度为0,会出现错误
    • 问题解决方法: 我俩检查了代码之后发现是没有考虑边界值的问题,添加了if-else语句判断输入的值就好了,改过的代码如下:
    int many = scan.nextInt();
                 while (true) {
                      if (many > 0) {
                           pra.CreateExpre(Tinumber, many, language);
                           pra.showC();
                           System.out.println("
    您答对的题目数为:" + pra.getTrues());
                           double trues = (double) pra.getTrues() / Tinumber;
                           System.out.println("您的正确率为:" + nf.format(trues));
                           System.out.println("
    再来一次输入y重来输入n退出)");
                           another = scan.nextLine();
                           break;
                       } else
                           System.out.println("输入错误!请重新输入,至少为1!");
                       many = scan.nextInt();
                                }
                       break;
    

    7、PSP

  • 相关阅读:
    js的包装对象
    js-原型
    js面向对象初识
    css3-3d
    用css制作三角形
    清浮动
    IE67下浮动元素margin-bottom值失效问题
    css圆角
    Use Memory Layout from Target Dialog Scatter File
    Qt QSting
  • 原文地址:https://www.cnblogs.com/sms369/p/10707478.html
Copyright © 2011-2022 走看看