2 qq 26451299 qq_26451299 于 2016.02.06 00:54 提问

java中 使用while(Scanner.hasNextIn()) 怎么才能停下来。。。。。。。 10C

图片说明

需求是:通过键盘随意输入几个数字,然后转变成数组,并排序

问题:while(Scanner.hasNextInt())停不下来,一直等待输入,试过以字母、符号结尾,但是都不能让循环停下来.........

请各位大大们解疑释惑,或者是有更好的方法能够实现这个需求么?

6个回答

qq2211360708
qq2211360708   2016.02.06 12:38

修改为:
图片说明

原因:
hasNext系列方法只会判断你缓冲区中的数据是否符合某种类型,而不会取出,所以当你下次循环这个方法发现缓冲区中还有数据,会继续判断缓冲区中的数据,所以产生了死循环,只有用Next()方法吧缓冲区中的数据接收掉,它就会重新向用户发送输入请求了

qq_28410301
qq_28410301   2016.02.06 14:45

**上楼正解,就相当于有3个人在排队,你题目中的s就相当于排在第3位,然后,s.hasNextInt()就相当于问有人排在第二位吗,接下来s.next(),就相当于第三位朝前进的一位,到达了第二位,接下来再进入循环,s.hasNextInt()就相当于问有人排在第一位吗,有就再循环直到前面没有人了,循环就结束了,但是当你没有s.next()时,s.hasNextInt()就相当于一直在问有人排在第二位吗,那肯定是有人的啊,所以就一直在循环里面了。

打了好多字。。。。。楼主觉得可以,望采纳。**。_

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.06 05:18

因为你没有终止条件,你可以在while条件中判断是某个数时结束,或者count为某个值时结束循环。

rui888
rui888   Ds   Rxr 2016.02.06 09:07

你方法用错了你应该扫描下一个, hasNext 下一个一直都存在的的。

sinat_37667248
sinat_37667248   2017.02.26 12:48

而且你要在最后输入一个非Int类型的值,不然控制台一直以为你没有输入结束,一直等待。例如2 3 1 4 2 c
在扫描到最后一个c时,Scanner.hasNextInt()为false,如果只是输入2 3 1 4 2
程序会一直等待

caozhy
caozhy   Ds   Rxr 2016.02.06 01:25

你需要在循环中调用
arr[i++] = scanner.nextInt();
或者
scanner.next();
让它读取下一个数
否则判断来判断去,都是判断的第一个。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!