【发布时间】:2021-07-06 13:52:16
【问题描述】:
使用 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)在预定义的硬编码条目数之后,2)在用户输入停止关键字(例如 quit)之后,3 ) 在用户在输入开始时给出的一些条目之后,依此类推......
-
嗨@gthanop 我想将数据实时保存到数据库中,因为数据是字符串并且可以是任何我不知道要设置什么退出标准的东西,例如:如果退出标准对于用户是输入 TERMINATE 循环应该停止,但同时 TERMINATE 可以是用户需要保存在数据库中的条目。
-
特殊控制字符 (EOF) 导致
hasNextLine返回 false:stackoverflow.com/a/16206876/2711811
标签: java java.util.scanner infinite-loop system.in