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.");
    }
}

```}

猜你喜欢

转载自www.cnblogs.com/20172325DYK/p/9011070.html