扫描器nextInt()和hasNextInt()问题

时间:2013-12-26 21:02:17

标签: java int

我正在研究为什么scan.nextInt()会消耗第二次迭代之前的整数。任何人都可以理解正在发生的事情并解释“扫描仪没有超越任何输入”意味着什么?

请忽略无限循环。它仅用于测试目的。

例:
输入新数据:0
0
输入的数据
再次输入数据:1
执行
输入新数据:1< - 自动输入此值(取自先前输入)
输入的数据
再次输入数据:

    while(true)
    {
        System.out.print("Enter new data: ");
        System.out.println(scan.nextInt());
        //scan.nextLine();    //must include but I'm not sure why 
        System.out.println("data entered");
        System.out.print("Enter data again: ");
        if(scan.hasNextInt())
        {
            System.out.println("executed");
            //scan.nextLine();    //must include this too but not sure why
        }
    }

1 个答案:

答案 0 :(得分:7)

一般模式是:

while(scan.hasNextInt())
{
    System.out.println(scan.nextInt());
}

首先你要确保有下一个int,如果有下一个int你用它做什么。你正在以其他方式做到这一点。首先你消耗它,而不是检查是否有另一个,这是错误的。

为什么我们应该在nextXXX之前调用hasNextXXX?因为如果没有这样的下一个令牌,nextXXX可以抛出NoSuchElementException。看看这个例子:

String str = "hello world";
Scanner scan = new Scanner(str);

此字符串中没有整数,表示

System.out.println(scan.nextInt());

将抛出NoSuchElementException。但是如果你使用我写的while循环,你首先检查输入中是否有一个Integer,然后再尝试用它做任何事情。因此,这是标准模式,而不是处理不必要的异常。