You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Bracket Balancing(括号匹配)代码对测试用例{(([])[])[]]}运行异常求助

问题排查结果

现有代码存在两个核心逻辑缺陷,直接导致测试用例{(([])[])[]]}运行异常:

  • 遇到右括号时未先判断栈是否为空就直接调用stack.peek():你提供的测试用例末尾多了1个额外的],前面所有括号完成匹配后栈已经为空,此时调用peek()会直接抛出EmptyStackException,程序中断不会走到最终栈是否为空的判断逻辑。
  • 缺少括号不匹配的异常分支:如果当前右括号和栈顶左括号类型不匹配(比如栈顶是(,当前字符是]),现有代码无任何处理逻辑,会直接跳过该字符继续遍历,最终结果完全错误。

修复后代码

package myProject;
import java.util.*;

public class bracketBalancing {
    public static void main (String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter String");
        String s=sc.next();
        Stack<Character> stack=new Stack<Character>();
        boolean isBalanced = true;
        if(s.length()==0) {
            System.out.println("string is empty");
            sc.close();
            return;
        }
        for(int i=0;i<s.length();i++){
            char ch=s.charAt(i);
            if(ch=='('||ch=='{'||ch=='['){
                stack.push(ch);
            }
            else if(ch==')'||ch=='}'||ch==']'){
                // 栈为空说明当前右括号没有对应的左括号,直接判定不匹配
                if(stack.isEmpty()){
                    isBalanced = false;
                    break;
                }
                char top = stack.peek();
                if((ch==')' && top=='(') || (ch=='}' && top=='{') || (ch==']' && top=='[')){
                    stack.pop();
                }else{
                    // 括号类型不匹配,直接标记失败
                    isBalanced = false;
                    break;
                }
            }
        }
        // 两个条件同时满足才是匹配:全程无类型不匹配、遍历结束后栈为空
        if(isBalanced && stack.empty()){
            System.out.println("YES");
        }else{
            System.out.println("No");
        }
        sc.close();
    }
}

内容的提问来源于stack exchange,提问作者shubham bhardwaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:24:03