• 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();

  • 相关阅读:
    RPC中阻塞队列的作用
    记用tensorflow-ranking时的bugs
    JDK作泛型比较时为什么把逻辑代码写两遍
    Java 不能声明泛型数组
    QuickSort Hoare vs Lomuto
    Java 对数组扩容
    Java交换两对象的问题
    毕业 失业
    dependencyManagement介绍
    web笔记
  • 原文地址:https://www.cnblogs.com/simon-idea/p/9819801.html
Copyright © 2020-2023  润新知