以下是我正在搞乱的代码:
import java.util.*; public class Work {
public static void main(String[] args){
System.out.println("Type 1 to convert from Farenheit to Celsius. Type 2 to convert from Farenheit to Kelvin.");
Scanner sc = new Scanner(System.in);
double x = sc.nextDouble();
while ((x != 1) && (x != 2)){
System.out.println("Please enter a value of either 1 or 2");
x = sc.nextDouble();
}
if (x == 1){
System.out.println("Enter the degrees in F and it will be converted to C:");
double y = sc.nextDouble();
double ans = convertoC(y);
System.out.println(ans + " C");
} else if (x == 2){
System.out.println("Enter the degrees in F and it will be converted to K:");
double v = sc.nextDouble();
double ans = convertoK(v);
System.out.println(ans + " K");
}
}
public static double convertoK(double x){
return ((x + 459.67) * (5.0/9.0));
}
public static double convertoC(double x){
return ((x - 32.0) * (5.0/9.0));
}
}
Eclipse告诉我扫描程序存在资源泄漏。我怎么能纠正这个? 此外,是否有更有效的方式接收输入呢?我觉得我的实现非常块,并且重复使用相同的代码。另外,我是否会使用try / catch来允许用户在没有输入数字的情况下重新输入另一个输入(因为它只会抛出异常)。
谢谢!
答案 0 :(得分:2)
您需要close()
扫描仪,以便释放它所拥有的任何资源。理想情况下,这是在finally块中完成的,这样您就可以确保始终释放扫描仪累积的资源。
因此,您需要声明扫描程序:Scanner sc = null
,然后将您方法的其余部分包装在try-catch块中。最后,添加finally
块,其中关闭扫描仪(sc
),前提是它不为空。
根据@Kevin Esche的评论,你也可以使用try-with-resources
,它类似于C#的using
指令。
您还在同一范围内的同一项目上声明了多个扫描仪。您在顶部声明的扫描仪应该足够,sx
和sy
是不需要的。