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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题。

看网上的代码都是使用Scanner接收用户输入,我写的代码如下
        Scanner scanner = new Scanner(System.in);
        int[] intArray = new int[5];
        for(int x=0; x<5; )//开始输入
                {
                        try
                        {
                                System.out.println("第"+(x+1)+"个是:"); //-----3
                                intArray[x] = scanner.nextInt();                //  ----1 输入一个字符串,抛异常
                                x++; //输入正确时,x+1,准备接收下一个数
                        }
                        catch(Exception e)
                        {
                                System.out.println("输入不正确,请重新输入,");   //---2一直在此处循环,不会停在要求输入的地方3处
                        }
       

为什么在 1处要求输入时输入一个字符串 ,就一直在2处循环

7 个回复

倒序浏览
在cache中添加scanner.next();
回复 使用道具 举报
@for 发表于 2014-7-24 22:54
在cache中添加scanner.next();

scanner在要求用户输入的时候,其实是在内存中创建了一段用于用户输入,输入字母等就会存入该段内存。当nextInt()调用时,就不能调用出来,因为它不是我们要调用的int类型,这时就会报输入不匹配错误。可是问题就在这儿,我们用nextInt()调用没把该段内存中的东西提出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值
回复 使用道具 举报
@for 发表于 2014-7-24 22:56
scanner在要求用户输入的时候,其实是在内存中创建了一段用于用户输入,输入字母等就会存入该段内存。当n ...

奥,它会一直去读取上一次输入的数据,因为输入的是字符串,不是int,所以继续抛异常,是这么个意思吧?

那我要连续输入好几个int,有什么好办法吗?
回复 使用道具 举报
@for 发表于 2014-7-24 22:56
scanner在要求用户输入的时候,其实是在内存中创建了一段用于用户输入,输入字母等就会存入该段内存。当n ...

解决方法就是清除该内存区域内容,或者把该内存区域的值取出来,在catch中调用next()就可以把该区域的值取出来了
                        try
                        {
                                System.out.println("第"+(x+1)+"个是:"); //-----3
                                intArray[x] = scanner.nextInt();                //  ----1 输入一个字符串,抛异常
                                x++; //输入正确时,x+1,准备接收下一个数
                        }
                        catch(Exception e)
                        {
                                        scanner.next();
                                System.out.println("输入不正确,请重新输入,");   //---2一直在此处循环,不会停在要求输入的地方3处
                        }
回复 使用道具 举报
space2007 发表于 2014-7-24 22:59
奥,它会一直去读取上一次输入的数据,因为输入的是字符串,不是int,所以继续抛异常,是这么个意思吧?
...

直接在几个int中添加空格试试
回复 使用道具 举报
@for 发表于 2014-7-24 23:00
解决方法就是清除该内存区域内容,或者把该内存区域的值取出来,在catch中调用next()就可以把该区域的值取 ...

试了下 可以了 谢谢啊
回复 使用道具 举报
adent 中级黑马 2014-7-25 01:17:01
8#
@for 发表于 2014-7-24 23:00
解决方法就是清除该内存区域内容,或者把该内存区域的值取出来,在catch中调用next()就可以把该区域的值取 ...

这样不是还没读到int吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马