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

时间:2011-09-30 16:47:15

标签: java input

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

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. )改变if while while
  2. )添加一个else块
  3. )添加else if(!input.hasNextInt())
  4. 这些都没有改变任何东西。我不知道程序应该如何继续前进并调用printSecond2()

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

有一种方法可以在行尾停止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后跟一个分隔符(无),输入在按下返回后停止。