黑马程序员技术交流社区

标题: 一个关于键盘录入的问题 [打印本页]

作者: 墨染    时间: 2015-8-23 22:14
标题: 一个关于键盘录入的问题
public static void main(String[] args){
                while(true){
                        Scanner sc = new Scanner(System.in);
                        int num = sc.nextInt();
                        System.out.println(num);
                        sc.close();
                }
        }
这一段代码int num = sc.nextInt();这句报异常是怎么回事?
作者: 墨染    时间: 2015-8-23 22:23
哪位大神帮忙解决下,
Exception in thread "main" java.util.NoSuchElementException
报这个异常
作者: wangboxiao12345    时间: 2015-8-23 22:29
分号中文的吧
作者: wangboxiao12345    时间: 2015-8-23 22:30
墨染 发表于 2015-8-23 22:23
哪位大神帮忙解决下,
Exception in thread "main" java.util.NoSuchElementException
报这个异常 ...

修改一下类名,一定要一致。
作者: 墨染    时间: 2015-8-23 22:31
wangboxiao12345 发表于 2015-8-23 22:29
分号中文的吧

不是这个问题,中文的话编译都不通过,运行时报的异常
作者: 放学后来我家    时间: 2015-8-23 22:33
   我觉得这题有毒
作者: wangboxiao12345    时间: 2015-8-23 22:34
墨染 发表于 2015-8-23 22:31
不是这个问题,中文的话编译都不通过,运行时报的异常

我们这也有个报这个错的,是类名和java文件名字不一致,不知道你是不是这个情况。。。
作者: 漠陌    时间: 2015-8-23 22:43
sc.close()把scanner关掉了 但下一次循环依然需要scanner,当然会异常
作者: 寒星在天    时间: 2015-8-23 22:47
没有导入把import java.util.Scanner;
作者: 徐鹏辰    时间: 2015-8-23 22:49
本帖最后由 徐鹏辰 于 2015-8-23 22:51 编辑

应该在sc.close();下面再加一个return;或者运用条件语句设置结束符,以结束循环。
因为只关闭扫描器,而循环还在进行,所以发生了Runtime异常。

作者: 墨染    时间: 2015-8-23 22:52
package com.itheima;


import java.util.Scanner;


public class Test32 {

        public static void main(String[] args){
               
                Scanner sc =null;
                while(true){
                        sc = new Scanner(System.in);
                        int num = sc.nextInt();
                        System.out.println(num);
                        sc.close();
                }
        }

}
这是完整代码,我把引用放到外面一样有这个异常
作者: 墨染    时间: 2015-8-23 22:55
漠陌 发表于 2015-8-23 22:43
sc.close()把scanner关掉了 但下一次循环依然需要scanner,当然会异常

Scanner sc = new Scanner(System.in)这句是在循环内的,每次循环都会重新创建对象的,而且我把sc.close()删掉编译就有警告说sc没关
作者: 墨染    时间: 2015-8-23 22:56
wangboxiao12345 发表于 2015-8-23 22:34
我们这也有个报这个错的,是类名和java文件名字不一致,不知道你是不是这个情况。。。 ...

报的是NoSuchElementException异常,
跟那个没关系,我名字也一样
作者: 漠陌    时间: 2015-8-23 22:59
墨染 发表于 2015-8-23 22:55
Scanner sc = new Scanner(System.in)这句是在循环内的,每次循环都会重新创建对象的,而且我把sc.clos ...

那奇怪了 我这把sc.close()注释掉就没有异常了
作者: 墨染    时间: 2015-8-23 22:59
444
444
Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:862)
        at java.util.Scanner.next(Scanner.java:1485)
        at java.util.Scanner.nextInt(Scanner.java:2117)
        at java.util.Scanner.nextInt(Scanner.java:2076)
        at com.itheima.Test312.main(Test312.java:14)
这个是结果,第一次循环没有问题,第二次循环还没等键盘录入就报异常说NoSuchElementException没有找到元素,脑壳有点疼
作者: 徐鹏辰    时间: 2015-8-23 23:03
最好的解决方案是,把sc.close();放在while循环的外面,这样就可以一直输入,另外再循环内用条件语句设置结束标记, 以结束循环录入!!希望能够解决你的问题
作者: 墨染    时间: 2015-8-23 23:03
徐鹏辰 发表于 2015-8-23 22:49
应该在sc.close();下面再加一个return;或者运用条件语句设置结束符,以结束循环。
因为只关闭扫描器,而循 ...

加了return的话就只能循环一次了,加结束语句也没用,还没等输end就报异常了
作者: 墨染    时间: 2015-8-23 23:05
漠陌 发表于 2015-8-23 22:59
那奇怪了 我这把sc.close()注释掉就没有异常了

确实没问题了,不过会有警告,不知道怎么去掉,有个黄色叹号简直受不了,不过谢谢你,应该是这个问题
作者: 墨染    时间: 2015-8-23 23:07
漠陌 发表于 2015-8-23 22:59
那奇怪了 我这把sc.close()注释掉就没有异常了

加了句@SuppressWarnings("resource")这个,终于没事了,谢谢
作者: 漠陌    时间: 2015-8-23 23:08
我这连异常都没有……

捕获.PNG (15.67 KB, 下载次数: 156)

捕获.PNG

作者: lf900827    时间: 2015-8-23 23:09
没有这种元素异常
作者: 徐鹏辰    时间: 2015-8-23 23:09
墨染 发表于 2015-8-23 23:03
加了return的话就只能循环一次了,加结束语句也没用,还没等输end就报异常了 ...

Scannery类中的nextInt()方法只能接受int类型的数据,输入字符串当然不可以了

作者: 墨染    时间: 2015-8-23 23:10
徐鹏辰 发表于 2015-8-23 23:03
最好的解决方案是,把sc.close();放在while循环的外面,这样就可以一直输入,另外再循环内用条件语句设置结 ...

代码会迭代的。。最后把sc.close(),给删了,加了@SuppressWarnings("resource")就没问题了,虽然我也不知道这是什么意思
作者: 墨染    时间: 2015-8-23 23:12
漠陌 发表于 2015-8-23 23:08
我这连异常都没有……

会有个黄色感叹号,说Resource leak: 'sc' is never closed,说它没关。。。
加了@SuppressWarnings("resource")这个,不过我不知道什么意思
作者: 徐鹏辰    时间: 2015-8-23 23:12
墨染 发表于 2015-8-23 23:10
代码会迭代的。。最后把sc.close(),给删了,加了@SuppressWarnings("resource")就没问题了,虽然我也不 ...

好吧,虽然我也不怎么懂,解决了就可以了
作者: 墨染    时间: 2015-8-23 23:14
徐鹏辰 发表于 2015-8-23 23:09
Scannery类中的nextInt()方法只能接受int类型的数据,输入字符串当然不可以了
...

我是输入的数字,问题解决了,没有关Scanner,加了句这个@SuppressWarnings("resource")
作者: JOKER0819    时间: 2015-8-23 23:15
没有导包吧!
作者: MoonsenHung    时间: 2015-8-23 23:21
楼主很有幽默,有黄色叹号都受不了,这样子纠结啊。。。。
作者: 张兵    时间: 2015-8-23 23:27
有导包吗?在最前面打:import java.util.Scanner;
作者: taojunqiu225    时间: 2015-8-23 23:31
没看明白~~

作者: hejin67410    时间: 2015-9-20 22:05
谢谢分享
作者: ln0491    时间: 2015-9-20 22:10
sc.close();不能关的,你在和循环外面不用的时候再关吧
作者: WOJIAOLIZHEN01    时间: 2015-9-20 22:18
你有导入包了吗?
作者: 残影    时间: 2015-9-20 22:55
估计是你没导入包。。import java.util.Scanner;




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