[英]Why is there an infinite loop when reading a list of integers from a single line using Scanner?
我需要用户在一行中输入整数列表,所以我这样写:
public static Integer[] readIntegers()
{
Scanner input = new Scanner(System.in);
List<Integer> list = new ArrayList<Integer>();
do list.add(input.nextInt());
while(input.hasNextInt());
return list.toArray(new Integer[list.size()]);
}
但它会永远循环播放! 如果扫描仪上没有数字,那么hasNextInt()
是否应该返回false
? 如何解决以前的方法? 还是应该改为使用nextLine()
并洒出字符串?
System.in
不会“结束”,因为您按Enter。 如果要用这种方法,可以在while
表达式中检查'\\n'
。
通常,我希望以其他方式执行此操作:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine(); // line == null indicates end of input.
或使用java.io.Console
。
另外,如果您使用do / while而不是while,则如果输入为空,则可能会遇到问题。
我相信您只是没有将EOF放入您的stdin,所以您的程序正在等待下一个输入。
要提供EOF
,请在Windows上使用ctrl+z
或在Linux上使用ctrl+d
。
如果只读取一行并将其内容放入Scanner
那会更好。 这样,用户不必放入EOF,而只需按Enter。
另外,您希望使用while
循环而不是do...while
,因为可能没有输入任何数字。 由于do...while
在一次迭代后首先检查条件,因此您的代码尝试读取至少一个整数,即使没有整数也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.