【发布时间】:2014-08-26 12:48:33
【问题描述】:
如果我关闭一个扫描仪对象并创建一个新对象并尝试读取更多输入,我将收到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() 方法,在该方法中我打开、使用和关闭名为 'sc' 的 Scanner。这工作正常,并给了我正确的输出。接下来,我调用 PanNumberExists() 方法,在该方法中我打开另一个名为 's' 的 Scanner 并尝试使用它从用户那里获取一些输入。这是我收到NoSuchElementException 异常的地方。如果我在 NameAddressExists() 方法中将 Scanner 'sc' 保持打开状态,则不会收到此错误。
【问题讨论】:
-
还有其他问题,查看您的代码会使问题更容易诊断。
-
这不是正常行为。你能显示你的代码吗?至于不关闭扫描仪——冒着被其他用户攻击的风险——如果你的程序不大,这没什么大不了的。但是最好关闭你打开的东西来管理内存。
-
只需在程序最后的最后一个块中关闭扫描程序,您就可以了。
-
另外,能否提供JDK版本和操作系统?
标签: java java.util.scanner nosuchelementexception system.in