Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以不同方法插入不同扫描仪时出现异常_Java_Exception_Java.util.scanner - Fatal编程技术网

Java 以不同方法插入不同扫描仪时出现异常

Java 以不同方法插入不同扫描仪时出现异常,java,exception,java.util.scanner,Java,Exception,Java.util.scanner,在main方法中,我创建了一个对象cls,并调用其方法test。此方法将调用另外两个方法(test1和test2)。每个都有扫描仪 public static void main(String[] args) { Class2 cls = new Class2(); cls.test(); } 第二类是: public class Class2 { public Class2() { }

在main方法中,我创建了一个对象
cls
,并调用其方法
test
。此方法将调用另外两个方法(
test1
test2
)。每个都有扫描仪

public static void main(String[] args) {
        Class2 cls = new Class2();
        cls.test();
    }
第二类是:

  public class Class2 {
 
        public Class2() {
        }
        
    public void test()
    {
        test2();
        test3();
        
    }
    
    public void test2() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("give a String:");
        String str = scanner.next(); 
        scanner.close();
    }
    public void test3()
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("give another String:");
        String str = sc.next();
        sc.close();
        
    }

}
执行之后,我得到了一个例外

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at Class2.test3(Class2.java:25)
    at Class2.test(Class2.java:11)
    at Class1.main(Class1.java:12)

请问我如何处理这个例外情况?通过在每个方法中保留不同的扫描仪

这是您的修正代码,并附有适当的注释

Class2.java

import java.util.Scanner;
public class Class2 {
    /*You dont have to create multiple scanner objects*/
    Scanner scan = new Scanner(System.in);

    public void test() {
        /*In order to run the methods in this class itself
        * you have to use static keyword or create object*/
        Class2 obj = new Class2();
        obj.test2();
        obj.test3();
        scan.close();
        /* As this method is run, scan.close() should be placed when you want to close InputStream
        * you will learn this in Java Streams*/
    }

    public void test2() {
        System.out.println("give a String:");
        String str = scan.nextLine();
    }
    public void test3() {
        System.out.println("give another String:");
        String str = scan.nextLine();

    }
}
Main.java

public class Main {
    public static void main(String[] args) {
        Class2 cls = new Class2();
        cls.test();
    }
}
为什么会发生错误?


Ans:当代码执行test2()方法时,它会使用scan.close()关闭结尾处的扫描仪输入流,因此当执行test3()时,它无法再读取数据。解决方案是在test3()方法或test()方法中关闭扫描器。

这是您的修正代码,并附有适当的注释

Class2.java

import java.util.Scanner;
public class Class2 {
    /*You dont have to create multiple scanner objects*/
    Scanner scan = new Scanner(System.in);

    public void test() {
        /*In order to run the methods in this class itself
        * you have to use static keyword or create object*/
        Class2 obj = new Class2();
        obj.test2();
        obj.test3();
        scan.close();
        /* As this method is run, scan.close() should be placed when you want to close InputStream
        * you will learn this in Java Streams*/
    }

    public void test2() {
        System.out.println("give a String:");
        String str = scan.nextLine();
    }
    public void test3() {
        System.out.println("give another String:");
        String str = scan.nextLine();

    }
}
Main.java

public class Main {
    public static void main(String[] args) {
        Class2 cls = new Class2();
        cls.test();
    }
}
为什么会发生错误?


Ans:当代码执行test2()方法时,它会使用scan.close()关闭结尾处的扫描仪输入流,因此当执行test3()时,它无法再读取数据。解决方案是在test3()方法或test()方法中关闭扫描仪。

您不应该打开多个扫描仪,也不能关闭它们。这篇文章对您有帮助吗?你不应该打开多个扫描仪,也不能关闭它们。这篇文章对你有帮助吗?