如何跳出外层循环实现Java程序输入含halted即终止
问题原因
你当前代码不生效的核心问题是:内层for循环中遇到"halted"时执行的break仅能终止当前遍历字符串的for循环,无法跳出外层的无限while循环。当"halted"是输入内容中的某一项时,程序只会停止遍历当前行的剩余内容,仍会继续等待下一次输入,不会整体终止。
另外原代码中单独判断整行是否等于"halted"的逻辑属于冗余逻辑,拆分后遍历的逻辑已经可以覆盖这种场景。
修复方案
方案1:用状态标记控制外层循环(推荐,可读性更强)
通过布尔变量标记程序运行状态,遇到"halted"时修改标记即可终止外层循环:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter words "); // 标记程序是否处于运行状态 boolean isRunning = true; while (isRunning) { String userText = scanner.nextLine(); String[] pieces = userText.split(" "); for (String piece : pieces) { System.out.println(piece); if ("halted".equals(piece)) { System.out.println(" Stop Program..."); isRunning = false; break; } } } scanner.close(); }
方案2:带标签的break(适合简单嵌套场景)
给外层循环加自定义标签,break时指定标签即可直接跳出多层循环:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter words "); // 给外层while循环定义标签 outer: while (true) { String userText = scanner.nextLine(); String[] pieces = userText.split(" "); for (String piece : pieces) { System.out.println(piece); if ("halted".equals(piece)) { System.out.println(" Stop Program..."); // 直接跳出标签对应的外层循环 break outer; } } } scanner.close(); }
内容的提问来源于stack exchange,提问作者amm1212
相关产品推荐
相关产品推荐

