Java中带if...else的while(true)循环为何每两次输入仅输出一次
问题原因
- 你在单次循环里连续调用了两次
Scanner.nextLine()方法,该方法每调用一次就会主动读取一行用户输入的内容:- 第一次调用在
if判断条件中,读取的内容仅用于判断是否等于done,没有存储也没有打印 - 若判断不触发中断,
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
相关产品推荐
相关产品推荐

