Java 变量未初始化。。。但是是吗?
因此,我目前正在开发的应用程序需要3个将值返回给另一个类的方法。我遇到的问题是我的第二个方法,它将第一个方法中的用户输入与相应的命名月份相关联。我不断收到来自此集合的“变量可能尚未初始化”错误:Java 变量未初始化。。。但是是吗?,java,Java,因此,我目前正在开发的应用程序需要3个将值返回给另一个类的方法。我遇到的问题是我的第二个方法,它将第一个方法中的用户输入与相应的命名月份相关联。我不断收到来自此集合的“变量可能尚未初始化”错误: public String MonthName(int monthNumber){ /*This method assigns a Name based on the users input and **returns the proper name of the correspondi
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;
}
非常感谢您的帮助 必须将变量初始化为:
String monthNameFin=null;
或
否则,如果始终有赋值,则可以跳过初始化,例如:
String monthNameFin;
if (monthNumber == 1){
monthNameFin = "January";
}else{
monthNameFin = "January";
}
在这种情况下,没有逃脱。。。to monthNumberFin在任何情况下都是一个值,而在您的代码中,它可能永远不会输入if。。假设为例如Monthumber=14,则必须将变量初始化为:
String monthNameFin=null;
或
否则,如果始终有赋值,则可以跳过初始化,例如:
String monthNameFin;
if (monthNumber == 1){
monthNameFin = "January";
}else{
monthNameFin = "January";
}
在这种情况下,没有逃脱。。。to monthNumberFin在任何情况下都是一个值,而在您的代码中,它可能永远不会输入if。。例如,假设monthumber=14,如果
monthNumber
小于或等于0,或者如果它大于或等于13,则您的案例总是不匹配。这意味着变量可能未初始化
因为超出1-12范围的数字没有意义,如果没有大小写匹配,最好在底部抛出一个IllegalArgumentException
此示例还包括将所有案例分配语句更改为return
语句,以便每个案例都有return
或throw
,即使对于不匹配的案例也是如此
...
if (monthNumber == 12)
return "December";
// No case matched.
throw new IllegalArgumentException("Bad month number: " + monthNumber);
}
调用此方法的代码应捕获此异常并正确处理它。如果
monthNumber
小于或等于0,或者如果它大于或等于13,则您的案例都可能不匹配。这意味着变量可能未初始化
因为超出1-12范围的数字没有意义,如果没有大小写匹配,最好在底部抛出一个IllegalArgumentException
此示例还包括将所有案例分配语句更改为return
语句,以便每个案例都有return
或throw
,即使对于不匹配的案例也是如此
...
if (monthNumber == 12)
return "December";
// No case matched.
throw new IllegalArgumentException("Bad month number: " + monthNumber);
}
调用此方法的代码应捕获此异常并正确处理它。编写此方法以处理所有整数情况的更简单方法:
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];
}
(2) 您可能应该以小写字母开头方法名称。编写此方法的更简单方法,可以处理所有整数情况:
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];
}
(2) 您可能应该以小写字母开始方法名称。正如其他答案所述,您必须初始化变量 但是如果,我将使用对象,而不是所有这些
公共字符串MonthName(int-monthNumber){
如果(月数<1 | |月数>12)
抛出新的IllegalArgumentException(“月份必须在[1,12]范围内”);
DateFormatSymbols dfs=DateFormatSymbols.getInstance(Locale.UK);
返回dfs.getMonths()[monthNumber-1];
}
正如其他答案所述,您必须初始化变量
但是如果
,我将使用对象,而不是所有这些
公共字符串MonthName(int-monthNumber){
如果(月数<1 | |月数>12)
抛出新的IllegalArgumentException(“月份必须在[1,12]范围内”);
DateFormatSymbols dfs=DateFormatSymbols.getInstance(Locale.UK);
返回dfs.getMonths()[monthNumber-1];
}
不应输入语句“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;
}
公共字符串MonthName(int-monthNumber){
/*此方法根据用户的输入和输入指定名称
**返回相应月份的正确名称
**@para:monthNameFin是这个月的最终名称
**其余部分应该不言自明*/
字符串monthNameFin=“”;/*不应输入语句“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;
}
公共字符串MonthName(int-monthNumber){
/*此方法根据用户的输入和输入指定名称
**返回相应月份的正确名称
**@para:monthNameFin是这个月的最终名称
**其余部分应该不言自明*/
字符串monthNameFin=“”;/*当monthNumber
等于任何其他值时会发生什么?如果monthNumber
为13会发生什么?您需要一个默认值,并且还应该使用if/else if/else if需要使用开关…case
。这不是对您的问题的回答,但您的代码可以通过使用数组来简单地改进。创建一个数组(或枚举)带有月份,如果数组范围为0-11
时i
应在范围1-12
内,则使用months[i]
获得正确的月份(或[i-1]
),您必须测试i
是否为正确的值(在正确的范围内)但与现在的20个相比,这只不过是一个。当monthNumber
等于其他任何东西时会发生什么?如果monthNumber
为13会发生什么?您需要一个默认值,并且您还应该使用if/else if/else if需要使用开关…case
。这不是对您的问题的回答,但您的代码可以是例如,通过使用数组进行简单改进。创建一个带有月份的数组(或枚举),并使用months[i]
获得正确的月份(或[i-1]
),前提是i
应在1-12
范围内,而数组范围为0-11
。您必须测试i
是否为正确值(在正确范围内)但是如果与现在的20个相比,这将是一个。谢谢你的建议。你有机会吗