这是初始化变量的正确方法吗?

时间:2014-03-01 19:34:26

标签: java initialization

在使用之前将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");
    }
}

5 个答案:

答案 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;
}

编辑:我发布了这个,因为有人发布了抛出异常的解决方案。我选择不在我的例子中,因为它可能不是一个未知的行星数字的意图是非法的论点。