黑马程序员技术交流社区

标题: Scanner类问题 [打印本页]

作者: 菠萝鱼    时间: 2014-3-10 13:28
标题: Scanner类问题
        //有键盘录入数据,转换成二进制后输出
        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("输入的不是数值型数据,请重新输入");,然后我再键盘录入新的数据,现在这个程序会一直循环打印"输入的不是数值型数据,请重新输入"这句话,没有停下来,这是为什么?


作者: kira    时间: 2014-3-10 13:30
因为你的需求:如果中了 就要让循环停下来
少一个让循环终止的判断
作者: 菠萝鱼    时间: 2014-3-10 13:40
kira 发表于 2014-3-10 13:30
因为你的需求:如果中了 就要让循环停下来
少一个让循环终止的判断

我是想让他一直运行,每循环一遍后都要到键盘录入状态,hasNext()不是个阻塞方法吗,当录入的值不是数值时,应该能让我在录入其他值。现在就是不停的打印,不提示键盘录入了。
作者: ╰つ    时间: 2014-3-10 15:53
来我们一起来看看,比如说你输入个”w“,这个肯定进到你的else里面,打印一句话,再continue,回去,进到while(sca.hasNext()),你发现没,sca.hasNext()这个方法只要随便输入一个值都会返回真,所以它会永远为真,无限进else,还不明白欢迎追问
作者: 菠萝鱼    时间: 2014-3-10 16:49
╰つ 发表于 2014-3-10 15:53
来我们一起来看看,比如说你输入个”w“,这个肯定进到你的else里面,打印一句话,再continue,回去,进到wh ...

嗯 当程序执行到sca.hasNext()时 程序是不是要停住,等待我键盘录入吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2