当我以不同的方法插入不同的扫描仪时出现异常
Exception when I insert a different Scanner in different methods
在 main 方法中,我创建了一个对象 cls
并调用了它的方法 test
。此方法将调用另外两个方法(test1
和 test2
)。每个都有自己的扫描仪。
public static void main(String[] args) {
Class2 cls = new Class2();
cls.test();
}
Class2 是:
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() 关闭扫描器 InputStream,因此当 test3() 是执行它不能再读取数据。解决方案是在 test3() 方法或 test() 方法中关闭扫描器。
在 main 方法中,我创建了一个对象 cls
并调用了它的方法 test
。此方法将调用另外两个方法(test1
和 test2
)。每个都有自己的扫描仪。
public static void main(String[] args) {
Class2 cls = new Class2();
cls.test();
}
Class2 是:
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() 关闭扫描器 InputStream,因此当 test3() 是执行它不能再读取数据。解决方案是在 test3() 方法或 test() 方法中关闭扫描器。