如何在不输入字符的情况下让Java的hasNextInt()停止等待整数?

我得到了以下代码,并要求编写从TestList扩展的Solution类。 我为它编写了一个构造函数(刚刚调用了super),并在下面代码的最后一行调用了printSecond2()方法。 所有其他方法都是inheritance的。 这是代码:

public class Test3A { public static void main(String[] args) { TestList tl = new Solution(); tl.loadList(); ((Solution) (tl)).printSecond2();//prints every second element } } 

但是,该死的东西从来没有打印过任何东西,所以我进入了TestList类(提供了它)并在loadList()方法的每一行之后放置了println语句:

  public void loadList () { if (input.hasNextInt ())//input is a Scanner object { int number = input.nextInt (); loadList (); add (number); } } 

我发现我可以继续无限地添加空格,换行符和整数,并且只有在输入字符时才会最终调用add(number)方法。 因此,如果我不这样做,它只是等待更多输入而不是继续前进。

由于提供的示例输入/输出是:我对此感到困惑:

样本输入

 1 2 3 4 5 

样本输出

 2 4 

因此,自动标记没有输入字符。

我试过覆盖解决方案中的方法(我们无法触及其他类)和:

  1. )改变如果到了
  2. )添加一个else块
  3. )添加一个else if(!input.hasNextInt())

这些都没有改变任何东西。 我不知道程序应该如何继续前进并调用printSecond2()

有什么想法吗? 我真的想通过我的下一个实践测试:D

当用户应输入一系列数字时,应提供项目数量或以某种方式终止输入。 1 2 3和1 2 3 4都是有效输入,因此扫描仪无法自行决定在何处结束。 可以假设数字序列由Windows上的EOF字符Ctrl-Z和unix上的Ctrl-D终止,因为没有给出其他信息。

有一种方法可以在行尾停止Scanner 。 您需要定义一个包含空格的分隔符,空表达式,而不是下一行字符:

 public static void main(final String[] args) { Scanner scan = new Scanner(System.in).useDelimiter(" *"); while (scan.hasNextInt() && scan.hasNext()) { int x = scan.nextInt(); System.out.println(x); } } 

这样Scanner看到\n后跟一个分隔符(无),按下返回后输入停止。