A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 半醉半醒半浮生 中级黑马   /  2015-9-8 22:11  /  306 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Scanner是一个扫描器,他会对你的输入进行扫描,当你输入后,会按照空格进行分割。比如你输入的是1 2 3
Scanner会将你输入的分割成三个元素,以next开头的方法会读取当前元素,并将指针后移。
nextFloat方法是一个阻塞方法,当你调用nextFloat时,程序会等待你从键盘输入,当你输入按下回车后,Scanner会开始对你的输入进行处理,处理的方式是按照空格进行分割。你第一次输入了一个字符串,此时Scanner中就只有一个元素,调用nextFloat时,如果转型失败就会进入catch语句块,此时Scanner中原来输入的错误字符串仍然存在,且指针仍然指着这个错误的串:
当没有next那句话时,程序会执行catch中的输出语句,并再次执行try中的语句,由于刚刚nextFloat失败,但是Scanner的指针仍然指着刚刚输入的错误串,也就是说Scanner中还有元素没有读完,因此会再次执行nextFloat,进而形成死循环;
当有next时,进入catch后,next会将Scanner的指针后移,在回到try中的nextFloat时,该方法发现Scanner的指针后面没有元素了,因为你本来就只输入了一个字符串,之后后移后,就没有了,因此会阻塞,等待你再次输入。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马