2014-03-04 79 views
0

所以我目前正在使用的应用程序需要3个方法将值返回给另一个类。我遇到的问题是使用第二种方法,将第一种方法的用户输入与相应的命名月相关联。我不断收到一个“变量可能没有被初始化”的错误从这个集合:变量未初始化...但它是?

public String MonthName(int monthNumber){ 
    /*This method assigns a Name based on the users input and 
    **returns the proper name of the corresponding month 
    ** @para: monthNameFin is the final name of the month 
    **  rest should be self-explanatory    */ 

    String monthNameFin; 

    if (monthNumber == 1) 
     monthNameFin = "January"; 
    if (monthNumber == 2) 
     monthNameFin = "February"; 
    if (monthNumber == 3) 
     monthNameFin = "March"; 
    if (monthNumber == 4) 
     monthNameFin = "April"; 
    if (monthNumber == 5) 
     monthNameFin = "May"; 
    if (monthNumber == 6) 
     monthNameFin = "June"; 
    if (monthNumber == 7) 
     monthNameFin = "July"; 
    if (monthNumber == 8) 
     monthNameFin = "August"; 
    if (monthNumber == 9) 
     monthNameFin = "September"; 
    if (monthNumber == 10) 
     monthNameFin = "October"; 
    if (monthNumber == 11) 
     monthNameFin = "November"; 
    if (monthNumber == 12) 
     monthNameFin = "December"; 

    return monthNameFin; 
} 

任何帮助,非常感谢!

+4

时会发生什么'monthNumber'等于别的什么吗? –

+2

如果monthNumber是13,会发生什么? –

+0

您需要一个默认值,并且您应该使用if/else if/else if –

回答

1

总是有可能性,您的案件都不匹配,如monthNumber小于或等于0,或者如果它是13或更大。这意味着变量没有被初始化的可能性。

由于1-12范围之外的数字没有意义,所以如果没有大小写匹配,最好在底部投一个IllegalArgumentException

此示例还包括将所有案例分配语句更改为return语句,以便每个案例都有returnthrow,即使是不匹配的案例。

... 
    if (monthNumber == 12) 
     return "December"; 

    // No case matched. 
    throw new IllegalArgumentException("Bad month number: " + monthNumber); 
} 

调用此方法的代码应该捕获此异常并正确处理它。

+0

感谢您的建议。你有任何一个例子吗?这对我来说完全是一个新概念。 – HFarnsworth

+0

非常感谢! – HFarnsworth

+0

所以...我尝试了这一点,我现在得到了一个关于我的返回值的“无法访问的声明”...任何想法? – HFarnsworth

3

您必须初始化变量:

String monthNameFin=null; 

String monthNameFin=""; 

否则,如果你所要的价值分配,你可以跳过初始化,例如:

String monthNameFin; 
    if (monthNumber == 1){ 
     monthNameFin = "January"; 
    }else{ 
     monthNameFin = "January"; 
    } 

在这种情况下是无法逃避的......对于monthNumberFin将在任何情况下都是一个值,而在您的代码中它mig ht发生它永远不会进入一个if ..假设它是例如montthumber = 14

0

写这篇处理所有整数的情况下更简单的办法:

public String monthName(int monthNumber) { 
    if (monthNumber < 1 || monthNumber > 12) return null; 
    String[] months = new String[] {"January", "February", "March", "April", "May", 
      "June", "July", "August", "September", "October", "November", "December"}; 
    return months[monthNumber]; 
} 

此外,

(1)只在第一次初始化MONTHNAME,也许

String month = monthName(monthNumber); 

(2)你应该可以用小写开始方法名称。

1

正如其他答案所述,你必须初始化你的变量。

但是,而不是所有这if,我会使用一个DateFormatSymbols对象。

public String MonthName(int monthNumber){ 
    if(monthNumber < 1 || monthNumber > 12) 
      throw new IllegalArgumentException("Month must be in the range [1, 12]"); 
    DateFormatSymbols dfs = DateFormatSymbols.getInstance(Locale.UK); 
    return dfs.getMonths()[monthNumber-1]; 
} 
0

不应该输入语句“IF”查找未初始化的变量。

初始化monthNameFin。

试试这个:

public String MonthName(int monthNumber){ 
    /*This method assigns a Name based on the users input and 
    **returns the proper name of the corresponding month 
    ** @para: monthNameFin is the final name of the month 
    **  rest should be self-explanatory    */ 

    String monthNameFin = ""; /* <----------- */ 

    if (monthNumber == 1) 
     monthNameFin = "January"; 
    if (monthNumber == 2) 
     monthNameFin = "February"; 
    if (monthNumber == 3) 
     monthNameFin = "March"; 
    if (monthNumber == 4) 
     monthNameFin = "April"; 
    if (monthNumber == 5) 
     monthNameFin = "May"; 
    if (monthNumber == 6) 
     monthNameFin = "June"; 
    if (monthNumber == 7) 
     monthNameFin = "July"; 
    if (monthNumber == 8) 
     monthNameFin = "August"; 
    if (monthNumber == 9) 
     monthNameFin = "September"; 
    if (monthNumber == 10) 
     monthNameFin = "October"; 
    if (monthNumber == 11) 
     monthNameFin = "November"; 
    if (monthNumber == 12) 
     monthNameFin = "December"; 

    return monthNameFin; 
}