在写作业复查的时候发现有个东西一直出错
是这个样子的。
一开始我以为是我一开始的主程序出错了
package test01;
import java.util.Scanner;
public class Test01 {
static Mer a ;
static char w;
public static void main(String args[]) {
int i=0
while(i==0) {
Scanner reader=new Scanner(System.in);
System.out.println("what wordtype is your(M or S or W):");
String s=reader.next();
char w = s.charAt(0);
if(w=='M')
{
Mer a=new Mer();
a.ComputeSalary();
}
if(w=='S') {
Saler a=new Saler();
a.ComputeSalary();
}
if(w=='W') {
work a=new work();
a.ComputeSalary();
}
reader.close();//一开始以为的错误
}
}
}
我一开始以为是reader 关闭了之后所以就不能再重复了,所以我删掉了这一行,但是之后我做了个小段落,重复的输入输出,结果发现并不会报错,这下我就奇怪了,既然可以remake reader那是那里出错了呢?
后面我去查找了一下错误代码的解决方法,发现有这样的说法“这是因为在函数中,声明了一个scanner对象,并且调用了close方法。这可能是由于所有的scanner类共享一个输入流,当其中一个调用关闭函数的时候,所有的scanner对象都关闭了。 ”
所以如果是一个循环内的scanner对象关闭了再打开是无所谓的,但是如果一个scanner类关闭了而其他的scanner想要用的话那么就会出错。于是我检查了全部的类,发现每个类中都有一个
reader.close();
发现的时候真的有点点无语。话说回来这样的scanner感觉不是很好用,但是感觉可以应用再一些隐私保护方面,改一个方面就全给你关咯。