繁体   English   中英

使用Scanner从单行中读取整数列表时,为什么会有无限循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM