变量'result'可能尚未初始化

时间:2015-06-28 14:39:09

标签: java

public class MonthName {
  public static String month_name(int month) {
    String result;

    if (month == 1) {
      result = "January";
    } else if (month == 2) {
      result = "February";
    } else if (month == 3) {
      result = "February";
    } else if (month == 4) {
      result = "February";
    } else if (month == 5) {
      result = "February";
    } else if (month == 6) {
      result = "February";
    } else if (month == 7) {
      result = "February";
    } else if (month == 8) {
      result = "February";
    } else if (month == 9) {
      result = "February";
    } else if (month == 10) {
      result = "February";
    } else if (month == 11) {
      result = "February";
    } else if (month == 12) {
      result = "February";
    }

    return result;
  }


  public static void main(String[] args) {
    System.out.println("Month 1: " + month_name(1));
    System.out.println("Month 2: " + month_name(2));
    System.out.println("Month 3: " + month_name(3));
    System.out.println("Month 4: " + month_name(4));
    System.out.println("Month 5: " + month_name(5));
    System.out.println("Month 6: " + month_name(6));
    System.out.println("Month 7: " + month_name(7));
    System.out.println("Month 8: " + month_name(8));
    System.out.println("Month 9: " + month_name(9));
    System.out.println("Month 10: " + month_name(10));
    System.out.println("Month 11: " + month_name(11));
    System.out.println("Month 12: " + month_name(12));
    System.out.println("Month 43: " + month_name(43));
  }
}

所以我已经在结果中声明了相关字符串的值,但它仍然说我的变量'result'可能没有被初始化。

我正在尝试实现类似于this的输出。 任何人都可以帮助我吗?谢谢!

4 个答案:

答案 0 :(得分:3)

如果您的变量月份可能为空或者某些< 1或> 12,则会发生这种情况。您可以简单地删除if-else树中的最后一个if,例如:



public class MonthName {
  public static String month_name(int month) {
    String result = "";

    if (month == 1) {
      result = "January";
    } else if (month == 2) {
      result = "February";
    } else if (month == 3) {
      result = "February";
    } else if (month == 4) {
      result = "February";
    } else if (month == 5) {
      result = "February";
    } else if (month == 6) {
      result = "February";
    } else if (month == 7) {
      result = "February";
    } else if (month == 8) {
      result = "February";
    } else if (month == 9) {
      result = "February";
    } else if (month == 10) {
      result = "February";
    } else if (month == 11) {
      result = "February";
    } else {
      result = "February";
    }

    return result;
  }


  public static void main(String[] args) {
    System.out.println("Month 1: " + month_name(1));
    System.out.println("Month 2: " + month_name(2));
    System.out.println("Month 3: " + month_name(3));
    System.out.println("Month 4: " + month_name(4));
    System.out.println("Month 5: " + month_name(5));
    System.out.println("Month 6: " + month_name(6));
    System.out.println("Month 7: " + month_name(7));
    System.out.println("Month 8: " + month_name(8));
    System.out.println("Month 9: " + month_name(9));
    System.out.println("Month 10: " + month_name(10));
    System.out.println("Month 11: " + month_name(11));
    System.out.println("Month 12: " + month_name(12));
    System.out.println("Month 43: " + month_name(43));
  }
}




这表示你的变量必须介于1到12之间,否则你应该抛出异常。但无论如何,我不会一直使用那些if-else树。无论如何,冗余太多了。

这相反:

switch (month) {
case 1:  result = "January";
         break;
case 2:  result = "February";
         break;
case 3:  result = "March";
         break;
case 4:  result = "April";
         break;
case 5:  result = "May";
         break;
case 6:  result = "June";
         break;
case 7:  result = "July";
         break;
case 8:  result = "August";
         break;
case 9:  result = "September";
         break;
case 10: result = "October";
         break;
case 11: result = "November";
         break;
case 12: result = "December";
         break;
default: result = "Invalid month";
         break;
}

答案 1 :(得分:1)

局部变量应在使用前初始化。它们没有默认值

初始化

String result="";

答案 2 :(得分:1)

由于month只是int,因此它可以采用1 - 12以外的值(您的if / else/if结构处理)。

要消除错误,您可以将其初始化为空String,但是,您可能需要考虑错误情况。

例如,该方法应该做什么,如果传递的内容不在1 - 12范围内?

答案 3 :(得分:1)

变量result尚未初始化。当输入介于1和12之间时,result将只包含一个值。

您可以在声明变量

时尝试此操作
String result = "";

或这样,您不需要添加另一行来将结果设置为错误。

String result = "error";