一、键盘输入类型与接收类型不一致

当在键盘上输入的类型与定义的接收输入的类型不一致时,可能会导致系统报错或者崩溃,如图:

JAVA输入参数类型错误_java输入类型与接收类型不一致

这时可以采用try catch包裹可能会出错的代码段

JAVA输入参数类型错误_JAVA输入参数类型错误_02


然后通常我们需要在catch里重新进行输入操作,这时我们会发现,我们总是不是不能在键盘上进行输入操作,其根本原因在于:

之前输入错误类型时系统进行了try catch操作,导致输入缓冲区里内容还未被读取出来,所以当我们再次使用Scanner对象输入数据时,jvm会优先将输入缓冲区内剩余的内容读取出来,赋值给你定义的变量,这就相当于完成了输入操作,所以我们无法再在键盘上输入任何数据

二、 那么如何清空输入区缓冲,完成我们的正常输入功能呢?

第一种方法:

对之前定义的Scanner对象的引用变量重新指向一个新的Scanner对象,这样相当于有了不同输入缓冲区,并且缓冲区内容为空,可以进行键盘输入操作:如图

JAVA输入参数类型错误_输入缓冲区_03


JAVA输入参数类型错误_输入缓冲区_04


这种方法的缺点就是可能会导致开启太多的Scanner对象,对内存有一定影响,代码结尾需要手动关闭Scanner对象,如:in.close();

第二种方法更简单易理解:
在前面定义个专门接收缓冲的字符串,然后在需要的地方使用这个字符串将输入缓冲里的内容读取出来(这相当于清空输入缓冲),方可继续正常使用之前的输入对象,如下所示:

JAVA输入参数类型错误_输入缓冲区_05


JAVA输入参数类型错误_java异常_06


JAVA输入参数类型错误_java清空输入缓冲_07


这样就可以继续进行输入操作了,是不是很简单啊,觉得有所帮助的可以给我点个赞哦