-1

这是我的代码:

    public String ShuntingYard(String input) {
    Tokenizer tokens = new Tokenizer(input);
    output = new LinkedList<String>();
    stack = new MyStack<String>(new LinkedList<String>(), new LinkedList<String>());

    while (tokens.hasNextToken()){
        String token = tokens.getNextToken();
        if (isOperator(token)){
            while (!stack.isEmpty() && isOperator(stack.peek())){
                    if ((leftassoc(token)&&precedence(token)<=precedence(stack.peek())) ||
                            (precedence(token)<precedence(stack.peek()))){
                        output.add(stack.pop());
                    }
                    else break; }
                    stack.push(token);

                }

                output.add(token); 
            }
        while (!stack.isEmpty())
            output.add(stack.pop());

        return output.toString();

        }

输入 3 + 5 * 6 + 7,它应该返回 3 5 6 * + 7 +,但我得到的是 3 + 5 * 6 + 7 + *。我很困惑为什么,因为我遵循了维基百科页面上的算法说明......我在其他地方搞砸了吗?我在这里先向您的帮助表示感谢!

4

1 回答 1

1

基本上,您缺少“其他”。根据您的代码检查算法。if (isOperator())在分支被采用或不被采用后,您没有正确处理此案。您还没有实现“(”或“)”。可能存在其他错误或遗漏。

于 2012-10-17T05:59:34.673 回答