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

Java中带if...else的while(true)循环为何每两次输入仅输出一次

问题原因
  • 你在单次循环里连续调用了两次Scanner.nextLine()方法,该方法每调用一次就会主动读取一行用户输入的内容:
    1. 第一次调用在if判断条件中,读取的内容仅用于判断是否等于done,没有存储也没有打印
    2. 若判断不触发中断,else分支里会第二次调用nextLine(),读取新的一行内容进行存储和打印
  • 这就导致每两次用户输入,只有第二次会被正常存储打印,自然就出现了隔行读取的现象。
修正方案

你只需要在循环开头读取一次输入,将内容存到临时变量里,再用这个变量做判断和后续存储即可,修正后代码如下:

int counter = 0;
ArrayList<String> destinations = new ArrayList<>();
Scanner input = new Scanner(System.in);

while (true) {
    // 单次循环只读取一次输入,存入临时变量
    String line = input.nextLine();
    if (line.equalsIgnoreCase("done")) {
        break;
    } else {
        destinations.add(line);
        System.out.println("\tDestinations: " + destinations.get(counter));
        counter++;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:21:00