我最近一直在学习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;。
任何帮助将不胜感激!谢谢!
答案 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++;
}
}