在此代码的第4行中,存在资源泄漏警告。输入=扫描();
我想要一个从用户那里获取整数的方法。如果先前输入的值是不可接受的,即chars,spec,它将要求用户重新输入一个整数值。 chars等。另外,我想在返回int之前关闭扫描仪。
如何解决此问题?
public static int readInt() {
Scanner input = scan();
while(!input.hasNextInt()) {
input = scan();
int n = input.nextInt();
while(n<0) {
System.out.println("Input should be a positive interger!");
n = readInt();
}
input.close();
return n;
}
return -1;
}
public static Scanner scan() {
System.out.print("Enter number: ");
Scanner input = new Scanner(System.in);
return input;
}
答案 0 :(得分:0)
每次要阅读某些内容时,都不应创建Scanner
的新实例,应创建一个实例并继续调用nextInt()
。
另外,我认为你的循环没有意义。我稍微重写了代码 - 如果你想在n
为正数之前不断向用户询问数字,那么将n < 0
作为循环条件是有意义的。
例如:
public static int readInt() {
Scanner input = new Scanner(System.in);
int n = -1;
while (n < 0) {
System.out.print("Enter number: ");
n = input.nextInt();
if (n < 0) {
System.out.println("Input should be a positive interger!");
}
}
input.close();
return n;
}
(另外,Scanner
构造函数抛出一个FileNotFoundException
所以你需要在上面的代码中处理它 - 你的例子是如何编译的?)
答案 1 :(得分:0)
将其与try catch
块一起使用,然后在finally
finally {
input.close();
}
完成后,您应始终关闭扫描仪: