' in无法解决' Java扫描程序

时间:2015-12-09 10:01:00

标签: java eclipse

我最近一直在学习Java并决定了解用户输入的一项小任务,我会为用户输入的数字创建一个时间表生成器。这是代码:

import java.util.Scanner;

public class Tables {

public static void main( String[] args) {

    int IFactor, num, ans;  

    Scanner Input = new Scanner(System.in);
    try {
        System.out.println("Please enter a number to be the factor: ");
        String SFactor = Input.next();
        IFactor = Integer.parseInt(SFactor); 

        num = 1;

        while (num < 11) {   
            ans = num * IFactor;
            System.out.println(num + " * " + IFactor + " = " + ans);
            num++; 
        }

    }
    finally {
        in.close();
    }

}

}

当我宣布扫描仪输入时,我最初遇到了错误。与Eclipse说明资源泄漏并且它没有被关闭。我做了一些研究,发现在&。39.in.close()中插入了一个try {}和一个finally {};&#39;会解决问题。但是,情况并非如此,因为我现在有错误:&#39; in无法解决&#39;。

任何帮助将不胜感激!谢谢!

5 个答案:

答案 0 :(得分:2)

in未分配给任何内容。 您必须关闭名为Input的扫描仪。

def list_replace(lst,elem,repl,n=0):
    ii=0
    if type(repl) is not list:
        repl = [repl]
    if type(elem) is not list:
        elem = [elem]
    if type(elem) is list:
        length = len(elem)
    else:
        length = 1
    for i in range(len(lst)-(length-1)):
        if ii>=n and n!=0:
            break
        e = lst[i:i+length]
        if e==elem:
            lst[i:i+length] = repl
            if n!=0:
                ii+=1
    return lst

答案 1 :(得分:1)

您的变量名称为Input,并且您正尝试执行in.close()。 它应该是:

finally {
   Input.close();
}

答案 2 :(得分:1)

尝试使用资源是关闭AutoCloseable资源的现代/推荐方式,例如Scanner。 E.g。

try (Scanner Input = new Scanner(System.in)) {
    // do stuff with Input
}

并跳过finally块。 Input块会在try块结束时关闭,如果抛出异常则会更早。而且你不必担心它。

检查Effective Java中的第7项,以避免finally阻止

答案 3 :(得分:0)

尝试

finally {
    Input.close();
}

代替。请注意,对于java,变量名一般以小写字母开头(和带有上面的Classes) - 所以最好将该变量重命名为`input?同样。

答案 4 :(得分:0)

问题是

finally {
    in.close();
}

您可以尝试使用try-with-resources的代码。它更像java8,你不需要finally子句:

try(Scanner Input = new Scanner(System.in);)
    {
        System.out.println("Please enter a number to be the factor: ");
        String SFactor = Input.next();
        IFactor = Integer.parseInt(SFactor); 

        num = 1;

        while (num < 11) {   
            ans = num * IFactor;
            System.out.println(num + " * " + IFactor + " = " + ans);
            num++; 
        }

    }