错误如下:
有时候还会抛出InputMismatchException异常
看!我只输入了一个5,并没有给str赋值,它就已经将结果打印出来了!这就意味着,str是读取到了数据的,只不过这个数据并不是我们想要的输入的数据!
这是因为nextInt() / nextDouble() 和 nextLine()的处理机制不同!
- nextInt() / nextDouble()在缓冲区中遇到 回车符、空格等空白字符时,它会将空白字符之前的数据都读走,但此时,空白字符还留在缓冲区中!
- nextLine()会把包括空白字符在内的数据都读走,所以这时就可以说得通为什么我们并没有输入,但是str就已经有值了,这是因为它读取到了我们在nextInt()输入最后打出的回车符!
解决方案:
- 在nextInt() / nextDouble()再添加一个nextLine(),让这个nextLine()将空白字符读走
- 将nextLine()换成next()
补充说明:
- Scanner的next()、nextInt()、nextLine()读取机制更详细的介绍:【JAVA】Scanner的next()、nextInt()、nextLine()读取机制