【发布时间】:2015-02-07 22:26:01
【问题描述】:
java中的程序是对后缀算术表达式求值。 我的程序没有收到任何错误,但我得到了错误的输出。
我正在尝试评估表达式(1*(((2+3)*(4-5))+6)),其结果为1。
但我得到的输出为11。
它的后缀表达式是1 2 3 + 4 5 - * 6 + *
期待您的帮助。 谢谢!!
public static void evaluatePostfix(String sol)
{
ArrayStack<Double> nlist = new ArrayStack<Double> ();
double op1, op2, result;
char ch;
for (int i = 0; i < sol.length(); i++)
{
if ('0' <= sol.charAt(i) && sol.charAt(i) <= '9')
nlist.push((double)(sol.charAt(i) - '0'));
else
if (sol.charAt(i)=='+'||sol.charAt(i)=='-'||sol.charAt(i)=='*'||sol.charAt(i)=='/')
{
op1 = nlist.pop();
op2 = nlist.pop();
ch = sol.charAt(i);
switch(ch){
case '+':
nlist.push(op1 + op2);
break;
case '-':
nlist.push(op1 - op2);
break;
case '*':
nlist.push(op1 * op2);
break;
case '/':
nlist.push(op1 / op2);
break;
default:nlist.push(0.000);
}
}
}
result = nlist.pop();
System.out.println(result);
}
【问题讨论】:
-
您是否尝试过在调试器中查看您的算法出错的地方?
-
我看不出你在哪里处理括号。
-
@DourHighArch 你不需要担心括号。这就是使用后缀表达式的全部意义所在。
标签: java stack postfix-notation