我需要用户在一行中输入整数列表,所以我写了这个:
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()
代替并填充字符串吗?
答案 0 :(得分:3)
System.in
没有“结束”因为你按回车键。
如果您想这样做,您可以在'\n'
表达式中检查while
。
一般来说,我宁愿以另一种方式这样做:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine(); // line == null indicates end of input.
或使用java.io.Console
。
此外,如果您使用do / while而不是在输入为空时可能会遇到问题。
答案 1 :(得分:1)
我相信你只是没有把EOF放到你的stdin,所以你的程序正在等待下一个输入..
要提供EOF
,请在Windows上使用ctrl+z
或在Linux上使用ctrl+d
。
答案 2 :(得分:1)
如果您只读一行并将其内容放在Scanner
中会更好。这样,用户就不必输入EOF,而只需按Enter键。
此外,您需要while
循环而不是do...while
,因为可能没有输入数字。由于do...while
在一次迭代后首先检查条件,因此即使没有任何整数,代码也会尝试读取至少一个整数。