问题1:
注意:in 是前面创建的一个Scanner对象
在输入firstName时输入薛 之谦(中间有空格),紧接着会输出"薛","年龄?" ,然后报错。为什么?
原因:
在Java中使用Scanner类时,不同的输入方法可能导致输入缓冲区残留数据,从而引发后续输入错误。在你的代码中,当输入姓氏时使用next()方法仅读取第一个单词,剩余内容(包括空格和换行符)会残留在缓冲区中,导致后续的nextInt()读取到非整数值而抛出InputMismatchException。
在输入firstName时输入薛 之谦,紧接着会输出薛,然后之谦进入缓存区,后续的in.nextInt()读取到的是非数值,而是之谦,报错。
解决:
在每次使用next()或nextInt()后,调用in.nextLine()清除缓冲区的残留内容。
next(),nextInt(),nextDouble()都是只读取一个字符串/正数/浮点型,以空格为分隔符
问题2:
如图所示:
需要输入一个整数和三个字符串,然后在输入了一个整数和两个字符串之后,直接进行输出了,并且a输出为0,ad和cs分别赋值给了b和c
原因:
在java中使用Scanner类时,混合使用nextInt()和nextLine()会导致输入缓存区残留换行符,从而引发非预期的读取行为。
nextInt()只读取数字,不会消耗输入流中的换行符(\n)。后续的nextLine()会立即读取这个残留的换行符,导致a得到一个空字符串
解决:
方案1:在调用nextInt()后,手动清除输入缓冲区中的换行符
方案2:直接用nextLine()读取整行数据,然后在手动转换为所需类型