学习java Scanner 时遇到了一个很有意思的问题。
写了两个方法单独用时,都没问题。但是按顺序连接着调用是就出现Java.util.NoSuchElementException 错误。
class ScannerDemo{
public static void main(String[] args){
test1();
test2();
}
public static void test1(){
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
System.out.println(num);
sc.close();
}
public static void test2(){
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
System.out.println(num);
sc.close();
}
}
调用另一个类中的方法,也不行。
public class ScannerDemo {
public static void main(String[] args){
Tests t=new Tests();
t.test1();
t.test2();
}
}
class Tests{
public void test1(){
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
System.out.println(num);
sc.close();
}
public void test2(){
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
System.out.println(num);
sc.close();
}
}
代码也没错,就一直找不到什么问题。就知道可能是扫描器出问题。
查了才发现原来:
Scanner sc =new Scanner(System.in);
System.in 在java中是静态变量,当前类所有的scanner对象共享它,当一个scanner对象执行close()操作后,其他所有的scanner对象都不可用了
使用时需要注意!!