gpt4 book ai didi

java - 如何计算后缀表达式中的符号?

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:23 26 4
gpt4 key购买 nike

我已经完成了后缀表达式计算器的代码,但我不确定当遇到负号时如何评估表达式。

例如表达式:-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() + "";
}

最佳答案

假设您已经标记并区分了 SIGN(一元)和 MINUS(二元运算符),并且这已经在后缀中,并且值已经压入堆栈 - 看起来都是这样 -

这很简单:

else if (type == TokenType.SIGN) { 
int x = stack.pop();
x = -x;
stack.push( x);
}

将 NUMBER 文字弹出,对其求反,然后将结果推回堆栈。一元运算符 ==> 一个输入离开堆栈,一个输出返回。

关于java - 如何计算后缀表达式中的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com