java读取输入遇到的问题

问题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()读取整行数据,然后在手动转换为所需类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值