0

在此代码的第 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;
}
4

2 回答 2

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构造函数会抛出 aFileNotFoundException所以你需要在上面的代码中处理它 - 你的例子是如何编译的?)

于 2013-08-14T08:24:25.270 回答
0

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

finally {
    input.close();
}

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

于 2013-08-14T08:27:28.747 回答