Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量未初始化。。。但是是吗?_Java - Fatal编程技术网

Java 变量未初始化。。。但是是吗?

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

因此,我目前正在开发的应用程序需要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;
}

非常感谢您的帮助

必须将变量初始化为:

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个相比,这将是一个
。谢谢你的建议。你有机会吗