首页 > 编程 > Java > 正文

Scanner类Java.util.NoSuchElementException 异常。

2019-11-08 01:00:34
字体:
来源:转载
供稿:网友

今天使用Scanner类从控制台获得数据时,报了java.util.NoSuchElementException 异常。

下面是问题代码段

public static void init(LinkList l){ for(int i=0;i<3;i++){ System.out.PRintln("请输入第"+i+"个值"); Scanner temp=new Scanner(System.in); int len=temp.nextInt(); l.addNode(len); temp.close(); } }

当要输入第二个数据的时候就会报错 。 这是异常信息

请输入第0个值2请输入第1个值Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at com.zji.List.LinkList.init(LinkList.java:33) at com.zji.List.LinkList.main(LinkList.java:60)

这是因为temp.close()在for循环中关闭的原因,只要把temp.close(),写在for循环外面就可以了。

刚开始我想我循环一次new 一个Scanner 然后给他关了 ,再循环再开不行吗? 不可以的哦! 这是因为 你的Scanner.close会调用System.in.close方法,把这个System.in关闭了。你之后new Scanner并不会帮你开启System.in的流,所以报错了.

下面是close方法的源码可以参考一下

public void close() { if (closed) return; if (source instanceof Closeable) { try { ((Closeable)source).close(); } catch (IOException ioe) { lastException = ioe; } } sourceClosed = true; source = null; closed = true; }

感谢大佬们的帮助谢谢你们!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表