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

图片说明

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

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

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

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

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

修改为:
图片说明

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

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

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

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

我记得以前好像可以直接回车跳出,但是现在突然发现了,掉坑。。。

while (scanner.hasNextLine()) {
String string = (String) scanner.nextLine();
if (string.equals("")) {
break;
}
}
这样就可以了,注意equals不能换成等号,因为等号比的是值(数值或地址值),而“”比较的其实是两个不同字符对象的内容而不是值。

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