1 つのスキャナー オブジェクトを閉じて新しいオブジェクトを作成し、さらに入力を読み取ろうとすると、NoSuchElementException
例外が発生します。
コードは正常に動作しますが、スキャナーを閉じないと警告が表示されます。ただし、警告を取り除くために閉じると、閉じてしまいSystem.in
ます...どうすればこれを回避できますか?
また、スキャナーを閉じないことによる影響はありますか?
編集:これが私のコードです:
これは NameAddressExists() メソッドです。
public void NameAddressExists() {
System.out.println("Enter name");
Scanner sc = new Scanner(System.in);
String n = sc.next();
System.out.println("Enter address");
String a = sc.next();
int flag = 0;
for(int i = 0; i < count; i++) {
if(array[i].name .equals(n) && array[i].address .equals(a)) {
System.out.println("True");
flag = 1;
}
}
if(flag != 1) {
new Agency(n, a);
}
sc.close();
}
これは PanNumberExists() メソッドです。
public boolean PanNumberExists() {
Scanner s = new Scanner(System.in);
String n = "";
System.out.println("Enter the 5 digits");
try {
n = s.nextLine();
}catch(Exception e) {
System.out.println(e);
}finally {
s.close();
}
if(n .equals(this.PAN.subSequence(4,9))) {
return true;
}
else {
return false;
}
}
これらのメソッドは、次の main() メソッドから呼び出されます。
public static void main(String args[]) {
Agency obj1 = new Agency("XYZ", "ABCD");
Agency obj2 = new Agency("XYZ", "ABCDEFG", "+91083226852521", "ab 1234567", "abcd12345ab");
// Agency obj3 = new Agency("XYZ", "TSRK", "36", "ab 1234567", "abcd12345ab");
obj1.NameAddressExists();
System.out.println(obj2.PanNumberExists());
}
ご覧のとおり、最初に NameAddressExists() メソッドを呼び出します。このメソッドで、Scanner
名前付きの「sc」を開き、使用し、閉じます。これは正常に機能し、正しい出力が得られます。次に、PanNumberExists() メソッドを呼び出します。このメソッドでは、Scanner
's' という名前の別のオブジェクトを開き、それを使用してユーザーからの入力を取得しようとします。ここで例外を受け取りNoSuchElementException
ます。NameAddressExists() メソッドで「sc」を開いたままScanner
にしておくと、このエラーは発生しません。