在Java中,Scanner就像是一个扫描器
它会从内存中的一块缓冲区中扫描并且读入数据
而这个Scanner扫描器在扫描过程中判断停止扫描的依据是“空白符”(空格或者回车)
在nextInt()在获取整数的过程中,若扫描到“空白符”,会把“空白符”前面的数据取走,但并不处理后面的空白符
到nextLine()运就的时候,则会把这个空白符读进去
但是因为一旦扫描到空白符,扫描就结束了,nextLine()就运行完了,只读取了一个空白符
但这还不至于报错
如果这个nextLine后面还有其他函数,比如nextInt()
就会导致nextInt()读取到了nextLine()本应该读取的字符,导致报错
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at project6.main.main(main.java:14)
解决方法:
方法一:
用两次nextLine(),第一个nextLine()接收空白符号,第二个nextLine()接收数据
int no= reader.nextInt(); String lastEnter= reader.nextLine(); String name= reader.nextLine();
方法二:
使用next()
但是next()接收字符串时,不接收任何空白符,遇到空格就停止
nextLine()则可以接收带空格的字符串,遇到回车才停止