-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

基本的に、「else」がありません。コードに対してアルゴリズムを確認してください。if (isOperator())ブランチが取得された後、または取得されなかった後は、ケースを正しく処理していません。また、'('または')'を実装していません。他のエラーまたは脱落があるかもしれません。

于 2012-10-17T05:59:34.673 に答える