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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菠萝鱼 中级黑马   /  2014-3-10 13:28  /  1095 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        //有键盘录入数据,转换成二进制后输出
        public static void test3(){
                Scanner sca=new Scanner(System.in);//键盘录入
                while(sca.hasNext()){
                        if(sca.hasNextInt()){
                                StringBuffer sb = new StringBuffer();
                                int a=sca.nextInt();
                                while(a!=0){
                                        int b=a%2;
                                        a=a/2;
                                        sb.append(b);
                                }
                                sb.reverse();
                                System.out.println(sb.toString());
                               
                        }else{
                                System.out.println("输入的不是数值型数据,请重新输入");
                               
                                continue;
                        }
                }
        }
        如果只是录入数字的话,就会计算完成后,然后又可以键盘录入了。但是当录入的是非数字时,会执行到System.out.println("输入的不是数值型数据,请重新输入");,然后我再键盘录入新的数据,现在这个程序会一直循环打印"输入的不是数值型数据,请重新输入"这句话,没有停下来,这是为什么?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
因为你的需求:如果中了 就要让循环停下来
少一个让循环终止的判断
回复 使用道具 举报
kira 发表于 2014-3-10 13:30
因为你的需求:如果中了 就要让循环停下来
少一个让循环终止的判断

我是想让他一直运行,每循环一遍后都要到键盘录入状态,hasNext()不是个阻塞方法吗,当录入的值不是数值时,应该能让我在录入其他值。现在就是不停的打印,不提示键盘录入了。
回复 使用道具 举报
来我们一起来看看,比如说你输入个”w“,这个肯定进到你的else里面,打印一句话,再continue,回去,进到while(sca.hasNext()),你发现没,sca.hasNext()这个方法只要随便输入一个值都会返回真,所以它会永远为真,无限进else,还不明白欢迎追问

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
╰つ 发表于 2014-3-10 15:53
来我们一起来看看,比如说你输入个”w“,这个肯定进到你的else里面,打印一句话,再continue,回去,进到wh ...

嗯 当程序执行到sca.hasNext()时 程序是不是要停住,等待我键盘录入吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马