为什么下面用sc。nextint)()的话会有异常,而且有点不能理解为什么下面可以这样

为什么下面用sc。nextint)()的话会有异常,而且有点不能理解为什么下面可以这样

1.下面用sc.nextint(),执行程序会有异常,是为什么呢?我觉得什么也是nextint,应该不冲突吧?
什么原因呢?

http://img1.sycdn.imooc.com//climg/5d05ec280001429e06560202.jpg

2.为什么下面不是 a[i]=sc.next();
而是直接sc。next?
有什么区别吗?
3.我自己是想i--;就够了,
因为i--;
感觉是重新来一次,但是我发现会陷入死循环,想不明白
为什么不是重新进行一次赋值,上面不是有a[i]=nextint();吗?
我的理解是重新符一次a[i],如果还不是int类型则继续进入下面异常;


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小班 2019-06-16 17:04:53

        同学你好,1、使用sc.nextInt()方法,就只能接收int类型的值,当出现e、a等非数字的值时,数据接收错误,就会出现异常!

        2、a[i]=sc.next();是将获取到的值赋值给数组下标为i的元素,而sc.next()是获取控制台输入的值,不做任何操作!这里已经进入catch中,说明控制台中的数据并不是int类型的值,所以不能使用nextInt()方法来接收,并且也不需要赋值给数组下标为i元素!

        3、这里理解是没有错的,当出现异常时,进入catch中,通过i--;来重新接收这个下标的元素,但是需要有一个方法来接收这个异常的值,如果不接收这个异常的值,就会陷入无限循环中哟!所以i--之前需要有sc.next()方法来接收这个值!

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

        

  • 提问者 慕容3243381 #1
    那为什么用sc.next()就直接可以对a[i]进行重新赋值呢?不清楚怎么回事 3中的意思算是sc.next()代替a[i]接受了上面那个(我们输入的异常值)键盘接收的值,所以这段代码的执行过程是怎么样的一回事呢?
    2019-06-17 07:43:48
  • 好帮手慕小班 回复 提问者 慕容3243381 #2
    同学你好,这里并不需要在catch中对a[i]进行重新赋值,同学这里可以这样理解一下:sc.next()方法需要给他一个键盘输入的值, 但是同学想啊,之前用nextInt()需要的是一个int类型的,结果你给的是一个字符串类型的,它是不会接收的。相当于那个之前输入的String类型的一直在上方飘着。直到它遇到一个对的方法,可以接收键盘输入的Sring类型的方法。直到他遇到了sc.next()。sc.next()需要接收一个键盘输入的String类型的值。而之前我们已经输入了一个了,但是还没有方法接收,然后这个sc.next()就会接收了。它不一定是让你必须现在输入,而是要等待一个键盘输入的String类型。正好它就把在上方等待接收的输入错误的给接收了。 接收完错误数据后,i的值--,重新获取一个键盘输入的值进行数组的赋值! 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-06-17 10:43:01
  • blade123 回复 提问者 慕容3243381 #3
    建议兄弟去看看try catch 语句的语法。
    2019-07-03 10:24:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师