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

Java中如何解决终端程序选择继续后异常停止的问题

问题原因分析

你遇到的问题确实和if分支缺少后续逻辑有关,拆解当前doMore()方法的执行顺序后就能明白程序停止的原因:

现有代码执行顺序

  • 进入doMore()方法后,首先打印是否继续操作的提示
  • 调用keyboard.nextLine()读取用户输入的回答
  • 对回答做分支判断:
    1. 如果回答是yes相关取值:执行showInstructions()方法,该方法执行完成后,if分支没有其他代码,整个doMore()方法执行结束,返回到调用doMore()的上级代码位置
    2. 如果回答是no相关取值:打印退出提示后调用System.exit(0),直接终止整个Java进程

你预期选yes后重复之前的提问流程,但现有代码在if分支执行完showInstructions()后,没有触发重新执行提问流程的逻辑,如果调用doMore()的外层代码也没有循环重新走提问流程,整个程序没有后续需要执行的代码,自然就会终止运行。

优化建议

  1. 简化判断逻辑:可以用String.equalsIgnoreCase()方法忽略大小写匹配,不用写多段或判断,示例:
if(answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y"))
  1. 新增循环逻辑控制流程:可以在外层加循环控制整个业务的执行,调整doMore()方法返回布尔值告知外层是否继续运行,示例代码如下:
// 主流程循环控制
public void runMainProcess() {
    boolean needContinue = true;
    while (needContinue) {
        // 这里替换为你原本的一系列提问逻辑
        askAllQuestions();
        // 调用doMore获取是否继续的标记
        needContinue = doMore();
    }
}

// 调整返回值为布尔类型的doMore方法
boolean doMore(){
    System.out.print("Do you want to do anything else? : Yes|No ");
    String answer = keyboard.nextLine();
    if(answer.equalsIgnoreCase("YES") || answer.equalsIgnoreCase("Y")){
        showInstructions();
        return true; // 告知外层继续循环执行提问流程
    }else{
        System.out.println("Thank you for using the lego manager. Please come back soon!");
        System.exit(0);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:08