在我的Java代码中,s.nextInt()之后,s.nextLine()会做什么?

时间:2019-03-29 13:52:40

标签: java java.util.scanner

我很难理解这段代码中发生的事情。 如果我注释掉行:

  

s.nextLine();

进入无限循环打印:“请仅输入数字0到9”

我不明白的是,为什么它进入无限循环而不是再次等待整数输入?

private static int getInt() {

    Scanner s = new Scanner(System.in);
    System.out.println("Please enter an integer ");

    while(true) {
        try {
            return s.nextInt();
        } catch(InputMismatchException e) {
            //s.nextLine();
            System.out.println("Please enter a number using only the digits 0 to 9");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

如果您输入的是令牌,且没有错配,例如任何int。现在,当您输入不匹配项时,它将进入catch块并在那里执行sysout。

之所以陷入无限循环是因为nextInt并没有读取行尾来获取新的输入-因此,它与先前的输入是无限循环。

通过调用nextLine,扫描程序会消耗整行,并准备进行下一次输入。

答案 1 :(得分:0)

您的while循环是无限循环的原因,因为条件始终为真。
它将继续尝试解析提供的输入,并且由于它从不执行s.nextInt(),因此扫描程序不会继续前进,而是继续考虑相同的输入。
需要告知“扫描仪”对象转到下一个要扫描的物体,否则它将保持在原位。

s.nextLine();使扫描仪越过先前的输入并准备好进行新的输入。

答案 2 :(得分:-1)

这里的问题是您正在使用“ return s.nextInt();”为此,输入必须是INTEGER 123456 ...否则,它将不断抛出该异常,因为随后无法解析value并将其转换为有效整数,从而导致无限循环。要进行验证,请尝试输入有效的整数而不是字母数字字符。