当前位置: 首页 > 知识库问答 >
问题:

扫描整数资源警告

马绪
2023-03-14

在这段代码的第4行,有一个资源泄漏警告。输入=扫描();

我想要一个从用户那里获取整数的方法。它会要求用户重新输入一个整数值,如果他以前输入的值是不可接受的,即字符、规格。字符等。此外,我想在返回所取的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;
}

共有2个答案

有睿
2023-03-14

你不应该创建一个新的Scanner实例,每次你想读一些东西时,你应该创建一个实例并继续调用nextInt()

而且,我觉得你的循环不太合理。我已经稍微重写了代码——如果你想一直问用户一个数字,直到n为正,那么使用n是有意义的

例如:

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,因此您需要在上面的代码中处理这个问题——您的示例是如何编译的?)

丁毅庵
2023-03-14

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

finally {
    input.close();
}

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

 类似资料:
  • 我正在读取一个文件并将其内容存储在字符串中。代码给了我一个警告:Resource leak:。我如何解决它?

  • 大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

  • 把这部分的log摘取出来. 以org.nutz.resource下的log为准 2015-03-30 10:49:49,383 org.nutz.resource.Scans.<init>(Scans.java:484) DEBUG - Locations for Scans: [JarResourceLocation [jarPath=D:\nutzbook\apache-tomcat-8.0.

  • 我正在看一些Java教程,对使用扫描器时的资源泄露警告感到疑惑。 我知道我可以关闭它,但视频中的人没有得到警告,即使他使用的是完全相同的代码,为什么呢?

  • 告警资源即宿主机、云账号等影响系统正常使用的资源因为告警策略发生告警,等待处理的未恢复系统资源告警列表。 告警资源即宿主机、云账号等影响系统正常使用的资源因为告警策略发生告警,等待处理的未回复系统资源告警列表。当此类告警发生时,用户可在界面右上角查看到告警资源数量等。用户通过资源匹配的告警策略排查资源的异常告警原因,当告警恢复后,则对应的告警资源将不再显示在告警列表。 入口:在云管平台单击左上角导

  • 资源泄漏:“扫描”永远不会关闭。 因此,我在代码末尾添加了来处理警告。 出现这个问题是因为我在同一个包中有其他类也使用scanner对象,而Eclipse告诉我分别关闭这些类中的scanner。然而,当我这样做时,它似乎关闭了所有的扫描器对象,并在运行时得到错误。 我遇到的一篇文章提到,当关闭时,我不能重新打开。如果是这种情况,我是否只需要确保一个带有System.in的扫描器对象在程序末尾关闭,