zoukankan      html  css  js  c++  java
  • 1-解决java Scanner出现 java.util.NoSuchElementException

    起因:在函数中新建scanner对象,然后多次调用此方法出现上述异常

    原因:Scanner(system.in)在Scanner中接受的是键盘 输入,当调用close()方法时

    Scanner的关闭会导致System.in的关闭,System.in是标准输入(键盘输入),只能关一次,关闭后不能再打开。

    解决办法1:在主函数的声明,然后作为参数传入方法中

    解决办法2:

      查看scanner源码

    // Boolean indicating if this scanner has been closed
        private boolean closed = false;
    
    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;
        }

       直接在函数中用反射改变closed的值,实现永远不关闭

     public void scanner() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
            Scanner my=new Scanner(System.in);
    
            a=my.nextInt();
            b=my.nextInt();
            c=my.nextInt();
            Class clazz  =Scanner.class;
            Field field = clazz.getDeclaredField("closed");
            field.setAccessible(true);
            field.set(my,true);
            my.close();
        }

      当想要关闭的时候,再使用反射改变为false,调用scanner.close();

  • 相关阅读:
    P3899 [湖南集训]谈笑风生
    bzoj3252: 攻略
    批量创建用户20个和密码
    创建100个目录dir1-dir100一键完成
    SVM的优缺点
    Python zip() 函数
    经典博客4
    python的空格和tab混用报错问题
    Python的functools.reduce用法
    matplotlib显示AttributeError: 'module' object has no attribute 'verbose'
  • 原文地址:https://www.cnblogs.com/simon-idea/p/9819801.html
Copyright © 2011-2022 走看看