Java中Scanner类在nextInt()后无法输入nextLine()的问题

Posted Yanspecial

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Scanner类在nextInt()后无法输入nextLine()的问题相关的知识,希望对你有一定的参考价值。

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。

nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

解决方法:

  在nextInt()之后,nextLine()之前插入一个空白的nextLine()把残留的\r读取掉。

以上是关于Java中Scanner类在nextInt()后无法输入nextLine()的问题的主要内容,如果未能解决你的问题,请参考以下文章

scanner.nextInt() 返回 java.util.NoSuchElementException

java Scanner类的nextInt()方法在循环中无法停止的问题

java 利用Scanner类的nextInt()方法从控制台读入一个整数

我在Scanner.nextInt()之后输入一个Scanner.nextLine()来使用新行,但它不能正常工作[重复]

Java获取输入

HDU 2075: A|B? (in Java)