cunzhang_cz 2016-02-05 08:54 采纳率: 33.3%
浏览 18736
已结题

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

图片说明

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

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

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

  • 写回答

7条回答 默认 最新

  • NoicFank 2016-02-05 22:45
    关注

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

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

    评论
  • 会写代码的猪 2016-02-05 20:38
    关注

    修改为:
    图片说明

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

    评论
  • sinat_37667248 2017-02-25 20:48
    关注

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

    评论
  • Dod_Jdi 2018-07-23 00:22
    关注

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

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

    评论
  • threenewbee 2016-02-05 09:25
    关注

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

    评论
  • 毕小宝 博客专家认证 2016-02-05 13:18
    关注

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

    评论
  • tony4geek 2016-02-05 17:07
    关注

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

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部