在java中评估表达式

时间:2014-07-29 20:09:22

标签: java stack

我的输出无法实现。 但它必须是可能的。 当我检查编辑器时,它表明案件总是如此 即最后三例开关。

public String isPossible(String express) {
    char a = ' ';
    char b = ' ';
    boolean flag = true;
    Stack<Character> pile = new Stack<Character>();
    char [] array = express.toCharArray();
    for (int i = 0 ; i < array.length ; i++) {
        a = array[i];
        switch (a) {
            case '(':
                pile.push(a);
                break;
            case '{':
                pile.push(a);
                break;
            case '[':
                pile.push(a);
                break;
            case ')':
                b = pile.pop();
                if (b != '(' || b != 'X')
                    flag = false;
                break;
            case '}':
                b = pile.pop();
                if (b != '{' || b != 'X')
                    flag = false;
                break;
            case ']':
                b = pile.pop();
                if (b != ']' || b != 'X')
                    flag = false;
                break;
        }

    }
    if (flag == false || pile.size() % 2 != 0)
        return "impossible";
    else
        return "possible";
}

public static void main(String args[]) {
    Merge a = new Merge();
    System.out.println(a.isPossible("(())"));
}

1 个答案:

答案 0 :(得分:2)

您的逻辑错误地使用了||(或)运算符。 b不是'('或者'X'总是如此。你想要&&(和)。

替换

if(b!='(' || b!= 'X')

if(b!='(' && b!= 'X')

,类似于案例陈述中的其他if条件。