在使用之前将newWeight
设置为0.0(在switch
块之前)是不好的做法?如果我只是声明它,我在编译器中收到错误,说变量newWeight
可能尚未初始化。
import java.util.*;
public class SpaceBoxing {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.print("Please enter your current weight ");
float weight = s.nextFloat();
System.out.println("I have information on the following planets");
System.out.println("1. Venus 2. Mars 3. Jupiter");
System.out.println("4. Saturn 5. Uranus 6. Neptune");
System.out.println(" ");
System.out.println("Which planet are you visiting");
int planet = s.nextInt();
double newWeight = 0.0;
switch(planet){
case 1:
newWeight = weight*0.78;
break;
case 2:
newWeight = weight*0.39;
break;
case 3:
newWeight = weight*2.56;
break;
case 4:
newWeight = weight*1.17;
break;
case 5:
newWeight = weight*1.05;
break;
case 6:
newWeight = weight*1.23;
break;
}
System.out.println("Your weight would be " + newWeight + " pounds on that planet");
}
}
答案 0 :(得分:2)
不,这不是不好的做法。它没有什么区别。
当然,您应该测试代码以确保它产生预期的输出。
答案 1 :(得分:2)
初始化变量这是一个很好的做法,因为当你有对象并且没有初始化它时,你只需要一些时间就可以得到NullPointerException。因此,初始化变量(尤其是对象)可能会使您免于该异常。
答案 2 :(得分:2)
您不需要在切换之前对其进行实例化,但是您应该在default
中添加switch
个案例,您可以在其中分配值或者抛出exception
。如果先前的情况不包括提供的参数,则将执行默认情况。
int planet = s.nextInt();
double newWeight;
switch(planet){
case 1:
newWeight = weight*0.78;
break;
case 2:
newWeight = weight*0.39;
break;
case 3:
newWeight = weight*2.56;
break;
case 4:
newWeight = weight*1.17;
break;
case 5:
newWeight = weight*1.05;
break;
case 6:
newWeight = weight*1.23;
break;
default:
newWeight = 0.0;
// or
throw new IllegalArgumentException();
}
答案 3 :(得分:2)
错误是因为你的switch语句不能保证设置newWeight ...如果行星某种程度上是例如7,然后你的System.out.println将打印出newWeight而不会分配它。
正如其他一些答案所示,您可以在完成后将newWeight初始化为0.0,或者可以为switch语句提供默认大小写。
答案 4 :(得分:0)
什么会更好:
int planet = s.nextInt();
double newWeight;
switch(planet){
case 1:
newWeight = weight*0.78;
break;
case 2:
newWeight = weight*0.39;
break;
case 3:
newWeight = weight*2.56;
break;
case 4:
newWeight = weight*1.17;
break;
case 5:
newWeight = weight*1.05;
break;
case 6:
newWeight = weight*1.23;
break;
default:
System.out.println("Unknown Planet");
return;
}
编辑:我发布了这个,因为有人发布了抛出异常的解决方案。我选择不在我的例子中,因为它可能不是一个未知的行星数字的意图是非法的论点。