1

下面的代码有一个编译器错误:

speedMsg might not been initialized

我该如何解决?

String speedMsg;

// Determine the grade
if (speed >= 150)
  speedMsg = "STOP! STOP! Please let me OUT!";
else if (speed <= 150)
  speedMsg = "Whew I'll just walk from here Thanks.";
4

7 回答 7

7

改成:

// Determine the grade
if (speed >= 150)
    speedMsg = "STOP! STOP! Please let me OUT!";
else
    speedMsg = "Whew I'll just walk from here Thanks.";

这应该足以让编译器确定变量将被初始化。

于 2013-04-25T14:22:18.443 回答
1

放:

String speedMsg = "";

或者去掉else if,改成else。

if (speed >= 150)
    speedMsg = "STOP! STOP! Please let me OUT!";
else
    speedMsg = "Whew I'll just walk from here Thanks.";

更好的是:

String speedMsg = speed >= 150 ? 
                    "STOP! STOP! Please let me OUT!" :
                    "Whew I'll just walk from here Thanks.";

您没有初始化您的字符串,然后尝试返回它。

于 2013-04-25T14:23:45.983 回答
1

替换else if为,else因为编译器会知道 speedMsg 总是有一个值。

于 2013-04-25T14:22:34.563 回答
0

如果或,您speedMsg可能不会被初始化 。speed >= 150speed <= 150

尽管很明显速度的所有可能值都在那里,但 Java 无法知道它。如果if else if您不使用 only if else,它将被初始化。

或者您需要在声明时初始化为默认错误消息。

于 2013-04-25T14:24:26.603 回答
0

错误变量 speedMsg 可能未初始化

此错误消息告诉您,变量(此处:speedMsg)可能为null。因此,如果您设置这样的默认值,您可以解决问题:

String speedMsg = "Speed";

或者你像这样修复它

if (speed >= 150)
    speedMsg = "STOP! STOP! Please let me OUT!";
else
    speedMsg = "Whew I'll just walk from here Thanks.";

您收到消息的原因是,eclipse 无法检查“if-else if”块中的比较是否有效,并且将始终设置 speedMsg(无默认值)。

恕我直言,第二种解决方案更优雅。

于 2013-04-25T14:37:12.033 回答
0

请初始化speedMsg:

String speedMsg = null;

那应该可以解决问题,speedMsg 可能未初始化

于 2013-04-25T14:23:06.863 回答
0

您必须包含一个else语句,因为编译器不够聪明,无法确定您已在and语句中包含了speed值的所有可能性。ifif else

请注意,局部变量是唯一没有默认值的变量,您需要对其进行初始化。

于 2013-04-25T14:23:18.607 回答