使用system.in和scanner.hasnext()的无限循环
当从用户获取输入并将其存储在列表中时,新手(像我一样)通常会考虑使用scanner类进行输入,并使用hasnext()方法检查用户的下一个输入,如下所示。但是经常忘记的是,程序会不断地要求用户提供输入,永远不会停止。当用户每次按enter键时,hasnext()方法都会认为生成了另一个输入,并继续循环(请记住,多次按enter键不会有什么不同)。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
List<String> wordsList = new ArrayList<String>();
while (scanner.hasNextLine())
wordsList.add(scanner.nextLine()); // Keeps asking user for inputs (never ending loop)
scanner.close();
for (String word : wordsList)
System.out.println(word);
}
}
奎。上述过程的工作备选方案是什么?这些方案允许用户动态地决定输入的数量,而不提及任何地方的总输入。
1条答案
按热度按时间umuewwlo1#
因为您要求用户可以输入任何有效的
String
作为输入,您可以:备选案文1:
用户可以在给出条目之前输入要给出的条目数。因此,您只需要循环请求的次数。例如:
备选案文2:
如果即使用户也不知道他们需要多少条,那么您可以在每次输入后询问他们,如下所示:
我知道,如果用户想退出或不想退出,每次输入这个(第二个)选项可能会有点无聊,但要退出程序(从第二个选项),他们必须做的唯一一件事就是键入任何会产生非空行/空行的内容。他们只需点击一个回车键即可继续输入。