【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案

错误如下:

有时候还会抛出InputMismatchException异常

【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案_第1张图片

看!我只输入了一个5,并没有给str赋值,它就已经将结果打印出来了!这就意味着,str是读取到了数据的,只不过这个数据并不是我们想要的输入的数据!

这是因为nextInt() / nextDouble() 和 nextLine()的处理机制不同!

  • nextInt() / nextDouble()在缓冲区中遇到 回车符、空格等空白字符时,它会将空白字符之前的数据都读走,但此时,空白字符还留在缓冲区中!
  • nextLine()会把包括空白字符在内的数据都读走,所以这时就可以说得通为什么我们并没有输入,但是str就已经有值了,这是因为它读取到了我们在nextInt()输入最后打出的回车符!

解决方案:

  1. 在nextInt() / nextDouble()再添加一个nextLine(),让这个nextLine()将空白字符读走
  2. 将nextLine()换成next()

【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案_第2张图片

补充说明:

  •  Scanner的next()、nextInt()、nextLine()读取机制更详细的介绍:【JAVA】Scanner的next()、nextInt()、nextLine()读取机制

你可能感兴趣的:(java,开发语言)