2

下面的代码给了我一个指向“return mon;”语句中的“m”的错误。当它在此方法开始时非常清楚地初始化时,它指出“变量 mon 可能尚未初始化”。它必须是超级简单的东西,我只是不明白!谢谢你。

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

3 回答 3

12

谁说它month总是 1 到 12 之间的整数?编译器当然不能保证。

要么初始化mon为 null,要么default在你的switch. (此外,您可以直接返回月份名称,而不是将它们设置在临时变量中。)

或者,一个更简单的解决方案可能是

String[] monthNames = {"January", "February", ..., "December"};
return monthNames[month - 1];
于 2013-03-13T19:05:13.057 回答
0

您应该monswitch (month). 此外,您应该为其分配空值。

于 2013-03-13T19:08:34.287 回答
0

如果月份数不正确,则返回 null 仅在调用者希望发生这种情况并准备检查 null 时才有用。

如果调用例程不检查 null 返回,那么您应该在默认情况下抛出 RuntimeException。这比允许代码在一段时间后因错误的月份名称导致的空指针异常而失败要好得多!

例如..

default:
  throw new RuntimeException("Invalid month number "+ month);

这也将阻止编译器抱怨,因为没有办法在未初始化 mon 的情况下访问 return 语句。

于 2013-03-13T19:22:04.033 回答