我已经完成了后缀表达式计算器的代码,但是当我遇到负号时,我不确定如何评估表达式。
例如,表达式:-1-2-3 在我的程序中如下所示:
原始 = -1-2-3
中缀标记 = [[-;SIGN], [1;NUM], [-;OP], [2;NUM], [-;OP], [3;NUM]]
后缀 = [[1;NUM], [-;SIGN], [2;NUM], [-;OP], [3;NUM], [-;OP]]
后缀评估 = -2
显然答案应该是 -6,但我只是看不到在数字应用于整个表达式之前实际制作符号背后的逻辑。我相信我的后缀方法是正确的,并且我知道我需要为看到标志创建一个案例,但我不知道在那之后该怎么做。
到目前为止,这是我的代码:
public static String eval(ArrayList<Tokenize.Token> list) {
Stack<Integer> stack = new Stack<Integer>();
for (int i=0; i<list.size(); i++) {
Tokenize.Token t = list.get(i);
TokenType type = t.getType();
if (type==TokenType.NUM) {
String x = t.getValue();
int x1 = Integer.parseInt(x);
stack.push(x1);
}
else if (type==TokenType.OP) {
int y = stack.pop();
int x = stack.pop();
if(t.getValue().equals("*")) {
int z = y * x;
stack.push(z);
}
else if(t.getValue().equals("/")) {
int z = y / x;
stack.push(z);
}
else if(t.getValue().equals("+")) {
int z = y + x;
stack.push(z);
}
else if(t.getValue().equals("-")) {
int z = y - x;
stack.push(z);
}
}
else if(type == TokenType.SIGN) {
//????
}
}
return stack.pop() + "";
}