20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

结对伙伴

  • 学号:20172306
  • 姓名:刘辰
  • 结对伙伴博客链接
  • 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有自己的想法并且能够把这个想法具体的实践出来,只是在编程的过程中和同学交流不够,总是在最后不行了才发现问题,很容易造成前功尽弃,希望在编程过程中多沟通,减少不必要的时间精力的浪费。

小组结对编程照片

项目中自己负责的部分

我负责的是两个部分,分别是:

  • 1、利用栈将中缀表达式转后缀表达式;
  • 2、对后缀表达式进行计算。

个人贡献度划分

我认为我们的贡献度划分是“ 50% :50% ” ;我们有两个成员,然后任务分配也比较容易,必做部分有四个,我们一人两个部分,因为每一个部分的完成都需要投入时间和精力,所以我认为没有难易之分,五五开。

相关过程的截图

- 分等级的题目的生成

- 能够实现真分数

- 后缀表达式的计算

关键代码解释

  • 后缀表达式的计算
    package 结对项目;
    /*
     *    后缀表达式的计算     作者:邓煜坤,刘辰
     *
     *    邓煜坤负责的部分
     */
    
    import java.util.Stack;
    import java.util.StringTokenizer;
    import java.util.Scanner;


    public class HZ {

       /*
    *由于我们的Test文件还没编好,各部分还没有联系起来,所以我先在这里把四个符号做出了声明
    */

    private final char ADD = '+';
    private final char SUBTRACT = '-';
    private final char MULTIPLY = '*';
    private final char DIVIDE = '/';

    private Stack<Integer> stack;

    /*
     * 初始化一个空栈,用来存储表达式
     */
    public HZ (){
        stack = new Stack<Integer>();
    }

    /*
     * 此处用来判断指定的char是否为操作符。
     *  如果是运算符,布尔值为真
     */
    private boolean isOperator(String str) {

        return (str.equals("+") || str.equals("-") || str.equals("*") || str
                .equals("/"));
    }

    /*
     * 下面是具体的计算过程
     */
    private int calculateSingleOp(char operator, int num1, int num2) {

        int result = 0;
        switch (operator)
        {
            case ADD:
                result = num1 + num2;
                break;
            case SUBTRACT:
                result = num1 - num2;
                break;
            case MULTIPLY:
                result = num1 * num2;
                break;
            case DIVIDE:
                result = num1 / num2;
                break;
        }

        return result;
    }

    /*
     *下面是计算指定的后缀表达式。
     *(1).如果遇到操作数,将其推送到栈上。
     *(2).如果遇到操作符,则弹出两个操作数以供运算符计算。
     *(3).将计算结果推到栈上。
     *字符串表示后缀表达式。
     */
    public int evaluate (String str) {

        int num1, num2, result = 0;
        // 指定特定的字符分隔符为空格。
        String token = "";
        StringTokenizer tokenizer = new StringTokenizer(str);

        while (tokenizer.hasMoreTokens()) {
            // 每一个字符都来自于字符串。
            token = tokenizer.nextToken();

            if (isOperator(token)) {
                num2 = (stack.pop()).intValue();
                num1 = (stack.pop()).intValue();
                result = calculateSingleOp(token.charAt(0), num1, num2);
                // 将计算结果推到栈上
                stack.push(new Integer(result));
            } else {
                stack.push(new Integer(Integer.parseInt(token)));
            }
        }
        return result;
    }


    public static void main(String[] args) {
        String expression = "";
        String again = "";
        int result = 0;

        try {
            @SuppressWarnings("resource")
            Scanner input = new Scanner(System.in);
            do {
                HZ evaluator = new HZ();
                // 读取一个有效的后缀表达式。即用户输入有效后缀表达式,之后在Test文件里将参数构建过来就好了。
                System.out
                        .println("Please enter a valid postfix expression : ");
                
                expression = input.nextLine();

                result = evaluator.evaluate(expression);
                System.out.println();
                System.out
                        .println("After evaluating, the calculated result is : "
                                + result);

                // 重复操作
                System.out.println("Do you want to test again? [Y/N]");
                again = input.nextLine();
                System.out.println();
            } while (again.equalsIgnoreCase("Y"));
        } catch (Exception IOException) {
            System.out.println("Input exception reported.");
        }
    }
  }
posted @ 2018-05-08 21:31  20172325  阅读(162)  评论(1编辑  收藏  举报