我在使用堆栈评估后缀表达式时遇到问题
for(int i=0;i<postfix.length;i++){
System.out.println("iteration:"+(i+1));
if(postfix[i].equalsIgnoreCase("+") || postfix[i].equalsIgnoreCase("-")
|| postfix[i].equalsIgnoreCase("*") || postfix[i].equalsIgnoreCase("/") ) {
num1 = Float.parseFloat((String)out.pop());
System.out.println("pop:"+num1);
num2 = Float.parseFloat((String)out.pop());
System.out.println("pop:"+num2);
if(postfix[i].equalsIgnoreCase("+")) {
temp = num2+num1;
out.push(temp);
System.out.println("push:"+temp);
}
else if(postfix[i].equalsIgnoreCase("-")) {
temp = num2-num1;
out.push((""+temp));
System.out.println("push:"+temp);
}
else if(postfix[i].equalsIgnoreCase("*")) {
temp = num2*num1;
out.push((""+temp));
System.out.println("push:"+temp);
}
else if(postfix[i].equalsIgnoreCase("/")) {
temp = num2/num1;
out.push((""+temp));
System.out.println("push:"+temp);
}
}
else{
System.out.println("push:"+postfix[i]);
out.push(postfix[i]);
}
}
如果我只在两个数字之间进行操作,则代码效果很好,例如"2 4 +"但是当它变成"2 4 + 5 +"时,错误突然出现。我什至放了记号笔..在那里打印以检查我的代码流程..谢谢有什么帮助吗?
在一行out.push(temp);
上,它正在推动一个浮点而不是一个字符串。
我建议你使用
Stack<Double> out = new Stack<Double>();
跟
double num1 = out.pop();
和
out.push(num2 + num1);
和
out.push(Double.parseDouble(postfix[i]));
由于 Stack 是一个遗留类,更好的选择是 Deque,但我认为你不需要担心为这个项目更改它。