扫描整数资源警告



在该代码的第4行中,有一个资源泄漏警告。input=scan();

我想要一个从用户那里获取整数的方法。如果用户之前输入的值不可接受,即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;
}

将其与try catch块一起使用,并在finally 中关闭

finally {
    input.close();
}

完成扫描后,您应该始终关闭扫描仪:

您不应该每次读取内容时都创建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,所以您需要在上面的代码中处理它——您的示例是如何编译的?)

相关内容

最新更新