首先,要明白,我们在控制台中所输入的数据都是先存入缓冲区中等待Scanner扫描。
然后,在Java中,Scanner就像是一个扫描器,它会从内存中的一块缓冲区中扫描并且读入数据,而这个Scanner扫描器在扫描过程中判断停止扫描的依据是“空白符”(即空格或者回车之类的空白符号)。
实际上 nextInt()
方法的运行原理是在扫描到“空白符”的时候,Scanner会把“空白符”前面的数据读取走并且在缓冲区中遗留一个空白符“\r”。
而nextLint()
方法的运行原理则是会把空白符好一同读取。
明白nextInt()
方法以及nextLine()
方法的运行原理之后,就不难理解为什么在使用nextInt()
之后无法使用nextLine()的问题了。
因为,当nextInt()
运行结束后,缓冲区会遗留一个空白符号,而后到nextLine()
运行的时候,则会把这个空白符号读取进去,而Scanner因为扫描到空白符,判定扫描结束,所以,会出现使用nextInt()
之后nextLine()
无法运行的现象。
实际上,nextLine()
并非没有运行,而是已经结束了运行。
因此要解决这个问题,可以在要运行的nextLine()
方法之前添加多一条nextLine()
语句,已读取nextInt()
遗留的空白符。