测试代码:

码云链接

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;
}

}

测试截图(加水印):

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

04-29 22:28