Java 以不同方法插入不同扫描仪时出现异常
在main方法中,我创建了一个对象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() { }
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()方法中关闭扫描仪。您不应该打开多个扫描仪,也不能关闭它们。这篇文章对您有帮助吗?你不应该打开多个扫描仪,也不能关闭它们。这篇文章对你有帮助吗?