Java 变量可能尚未初始化
对于我的Comp Sci类,我必须制作一个程序,查找给定月份(1-12)的天数,你知道为什么我在尝试从开关返回int“days”时出现错误“variable days not have initialized”?代码如下:Java 变量可能尚未初始化,java,variables,initialization,Java,Variables,Initialization,对于我的Comp Sci类,我必须制作一个程序,查找给定月份(1-12)的天数,你知道为什么我在尝试从开关返回int“days”时出现错误“variable days not have initialized”?代码如下: public static int getNumberofDays(int month,int year) { // Imports the required Scanner Scanner kbd = new Scanner(System.in
public static int getNumberofDays(int month,int year)
{
// Imports the required Scanner
Scanner kbd = new Scanner(System.in);
final String month;
final int days;
switch (month) {
case 1: days = 31;
break;
case 2: if ((year % 4 == 0) && year % 100 != 0)
{
days = 29;
}
else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
{
days = 29;
}
else
{
days = 28;
}
break;
case 3: days = 31;
break;
case 4: days = 30;
break;
case 5: days = 30;
break;
case 6: days = 31;
break;
case 7: days = 31;
break;
case 8: days = 31;
break;
case 9: days = 30;
break;
case 10: days = 31;
break;
case 11: days = 30;
break;
case 12: days = 31;
break;
default: month = "invalid";
break;
}
return days;
}
最后一个字符串月份代码>无效,因为月份
作为参数提供给函数
days
:您的开关中的default
块不起作用。这是Java的一个很好的特性,因为它可以帮助您实现程序的稳定性。没有什么比编译器告诉你该怎么做更好的了不要通过写入final int days=0强制发布代码>;而是在default
块中为其指定一个值
final int days;
应该是:
int days = 0;
为什么?
- 应该初始化方法中的变量
- 不能修改最终变量
其他错误:
- 在
switch
- 定义一个
,将参数字符串month
int month
未使用扫描仪
- 还有很多。。。XD
我用你的方式解决问题 此外,如果您不打破案例块,则将执行下一个案例块,这意味着您可以执行:
public static int getNumberofDays(int month,int year) {
switch (month) {
case 1:
case 3:
case 6:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 5:
case 9:
case 11:
days = 30;
break;
case 2:
if ((year % 4 == 0) && year % 100 != 0)
{
days = 29;
}
else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
{
days = 29;
}
else
{
days = 28;
}
break;
default: days = -1;
break;
}
return days;
}
我的解决方案:!:
解决方案:
Java-8
添加
days=0代码>设置为默认情况,如下所示:
default:
month = "invalid";
days = 0;
break;
在尝试返回之前,必须在代码路径的某个位置为days
指定一个值。您还应该替换final int days代码>带整数天代码>。
此外,您不能有最终字符串month
,因为month
是作为参数传递给函数的。。只需删除月的重新声明,您就是黄金。并非所有可能的代码路径都为days变量赋值。默认块确实不存在
default: month = "invalid";
break;
如果你把它改成
default: month = "invalid";
days=0
break;
警告消失了
我的其他问题是:
- 为什么要定义字符串month,从而隐藏参数month
- 扫描仪是干什么用的
- 为什么在默认块中为月份指定无效值,而从不返回它
您发布的代码不准确。这会引发另一个编译错误。这是一个多么棘手的问题!一种方法有这么多错误,很酷!你的重复作业很难看,这意味着你不能再使用final
@Neil agree,copy-paste-error,modified@芭丝谢芭:我不使用final,但同意重复陈述。。。我的错误和修正我们都忽略了一个事实,month
是作为函数参数传递的。@jordica仍然有点让家庭作业失去乐趣,不是吗?;)这会解决问题,但解释一下原因会很好。编辑:我收回这句话,这只会解决两个问题中的一个。。我也需要早上的咖啡好的,别着急。。savages Lol,尤其是现在我更仔细地阅读了这个程序,值得一提的是,Java8现在允许您简单地这样做,以获得月份天数:YearMonth yearmonthboject=YearMonth.of(1999,2);int daysInMonth=yearmonthbobject.lengthOfMonth()代码>确实如此。我假设(可能是疯狂地)这是一个学校的练习。这似乎是正确的,但上帝禁止一个专业程序员偶然发现这一页并将那个巨大的switch语句复制到他的程序中。
default: month = "invalid";
break;
default: month = "invalid";
days=0
break;