如何使用 Java 中的 Dijkstra 算法评估带括号的算术问题?

问题描述 投票:0回答:0

我知道算法是如何工作的,并且有两个堆栈。但似乎问题出在代码上。因为它正在错误地解决它。是因为我使用了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.

java generics stack dijkstra arithmetic-expressions
© www.soinside.com 2019 - 2024. All rights reserved.