使用ArrayList作为堆栈来验证元素对(获得异常结果)

时间:2018-02-14 12:57:22

标签: java arraylist stack

以下布尔方法确定(99%的时间!)由不同括号组成的给定字符串是否为“平衡”,即。如此命令的括号将构成有效的句法安排。括号分别被送入ArrayList,然后ArrayList作为堆栈运行,删除它们出现在列表末尾的有效对。然后一个空列表返回true,表示一个平衡的'布置。

我的问题是,为什么以下不平衡'输入...

([])({)}

返回true?

如果有人花时间了解问题,我真的很感激。

public static boolean isBalanced(String e) {
    char a[] = e.toCharArray();
    ArrayList<Character> b = new ArrayList<Character>();
    for (int i = 0; i<a.length; i++){
       b.add(a[i]);
       while (b.size() >= 2 && ((b.get(b.size()-2)=='(' && b.get(b.size()-1)==')') || (b.get(b.size()-2)=='[' && b.get(b.size()-1)==']') || (b.get(b.size()-2)=='{' && b.get(b.size()-1)=='}'))){
           b.remove(b.size()-2);
           b.remove(b.size()-1);
        }             
        if (b.isEmpty()){
            return true;
        }
    }
        return false;
    }

1 个答案:

答案 0 :(得分:2)

因为在检查( [ ] )之后,即。 i=3条件b.isEmpty()是真的。

将条件改为:

if (b.isEmpty() && i == a.length - 1) {
    return true;
}