我知道算法是如何工作的,并且有两个堆栈。但似乎问题出在代码上。因为它正在错误地解决它。是因为我使用了for循环吗?我看到一个用户使用 while 循环的实现,但我不知道如何实现它。是因为我在应该使用字符串的地方使用
string.charAt(i)
吗?
任何帮助将不胜感激,我不是专业的编码员,所以我真的很感激一个清晰的解释。
谢谢!
String string = "(1+((2+3)*(4*5)))";
Stack <Character> operations = new Stack<Character>();
Stack <Double> values = new Stack<Double>();
for(int i=0; i<string.length();i++) {
if(string.charAt(i)=='(');
else if(string.charAt(i)=='+'||string.charAt(i)=='-'
||string.charAt(i)=='*'||string.charAt(i)=='/')
operations.push(string.charAt(i));
else if(string.charAt(i)==')') {
char op = operations.pop();
if(op=='+') values.push(values.pop()+values.pop());
else if(op == '-') values.push(values.pop()-values.pop());
else if(op == '*') values.push(values.pop()*values.pop());
else if(op == '/') values.push(values.pop()/values.pop());
}
else values.push(Double.valueOf(string.charAt(i)));
}
System.out.println(values.pop());
代码没有给我错误。但是它在控制台栏中输出的答案是 278405.0 应该是 101.