Java程序触发switch default分支后输入quit无法退出问题求助
问题分析与修复方案
问题根源
输入非法指令触发switch的default分支时,代码调用了enterCommand(),这会创建新的输入循环嵌套在原循环中。当你输入"quit",只是退出了内层的新循环,程序会回到外层最初的while循环,继续要求输入,导致无法正常退出程序。
修复方案(保留switch语句)
核心思路是让输入循环的控制权完全由enterCommand()负责,checkCommand()仅处理指令逻辑,不再递归调用输入方法。
修复后的代码:
import java.util.Scanner; public class Main { static void checkCommand(String command) { switch (command) { case "add" -> System.out.println("added"); case "access" -> System.out.println("accessed"); case "compare" -> System.out.println("compared"); default -> System.out.println("Invalid command, please try again"); } } static void enterCommand() { Scanner usrInput = new Scanner(System.in); String input; do { System.out.print(">>> "); input = usrInput.nextLine(); if (!input.equals("quit")) { checkCommand(input); } } while (!input.equals("quit")); } public static void main(String[] args) { enterCommand(); } }
修改说明
- 移除
checkCommand()中的enterCommand()调用,避免嵌套循环导致的退出混乱 - 将原while循环改为do-while结构,确保先输出提示符再接收输入,逻辑更连贯
- Scanner仅初始化一次,避免重复创建资源
- 所有输入的读取和循环终止判断都由
enterCommand()统一处理,退出逻辑单一可靠
内容的提问来源于stack exchange,提问作者Gavin Hayes
相关产品推荐
相关产品推荐

