关于第11周课堂mini dc的课堂练习

测试代码:

码云链接

import java.util.Scanner;

public class MyDCTester {
public static void main(String[] args) {
String expression, again;
int result;
try {
Scanner in = new Scanner(System.in);
do {
MyDC evaluator = new MyDC();
System.out.println("Enter a valid postfix expression: ");
expression = in.nextLine();
result = evaluator.evaluate(expression);
System.out.println();
System.out.println("That expression equals " + result);

            System.out.print("Evaluate another expression [Y/N]? ");
            again = in.nextLine();
            System.out.println();
        }
        while (again.equalsIgnoreCase("y"));
    } catch (Exception IOException) {
        System.out.println("Input exception reported");
    }
}

}

补充代码:

码云链接

import java.util.StringTokenizer;
import java.util.Stack;

public class MyDC {
private final char ADD = '+';
private final char SUBTRACT = '-';
private final char MULTIPLY = '*';
private final char DIVIDE = '/';
private Stack stack;

public MyDC() {
    stack = new Stack<Integer>();
}

public int evaluate(String expr) {
    int op1, op2, result = 0;
    String token;
    StringTokenizer tokenizer = new StringTokenizer(expr);
    while (tokenizer.hasMoreTokens()) {
        token = tokenizer.nextToken();
                    if (isOperator(token))//如果是操作数
        {
            op2 = (stack.pop()).intValue();
            op1 = (stack.pop()).intValue();
            result = evalSingleOp(token.charAt(0), op1, op2);
            stack.push(new Integer(result));
        } else
            stack.push(new Integer(Integer.parseInt(token)));
    }
        return result;
    }

private boolean isOperator(String token) {
    return (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"));
}

private int evalSingleOp(char operation, int op1, int op2) {
    int result = 0;
    switch (operation) {
        case ADD:
            result = op1 + op2;
            break;
        case SUBTRACT:
            result = op1 - op2;
            break;
        case MULTIPLY:
            result = op1 * op2;
            break;
        case DIVIDE:
            result = op1 / op2;
    }
    return result;
}

}

测试截图(加水印):

posted @ 2017-05-03 10:25  专业打劫三十年  阅读(82)  评论(0编辑  收藏  举报