Scanner类Java.util.NoSuchElementException 异常
Scanner类Java.util.NoSuchElementException 异常
为了美好的明天 发表于1年前
Scanner类Java.util.NoSuchElementException 异常
  • 发表于 1年前
  • 阅读 15
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

今天使用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;
  }

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

标签: 异常 NoSuchElement
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 15
博文 365
码字总数 142088
×
为了美好的明天
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: