2013-05-27 56 views

回答

2

在if块的内部使用变量之前,需要对它进行初始化。

试试这个:

double albedo=0; 

相反的:

double albedo; 

但是要记住,你的变量将保持0,如果您还没有指定一个else块你的条件返回false。

+0

谢谢,这工作完美! – ninopino1

+1

这会导致编译错误消失,但会造成误导,并不能真正解决原始逻辑问题。没有必要在声明点初始化一个Java变量。在尝试使用该值之前,有必要分配一个值。这里有两个代码路径,一个访问if块的内部,另一个不访问。如果if条件为真,则分配一个值,否则不分配。 “否则不是”导致编译错误。顺便说一句,if条件在这里永远不会是真的,因为没有数字既不低于-50也不高于+50。 –

0

局部变量应该值初​​始化使用它.Something这样前:

double albedo = 0.0; 

编译器会抱怨,因为局部变量没有分配任何默认值。因此,在运行时如果if()条件失败,那么变量将不会被赋值,在这种情况下,运行时应该返回给函数的调用者什么值?因此用一些默认值初始化它。

+0

只是阅读这个答案,它解释了为什么错误是完美的,非常感谢你的明确解释,我不敢相信我没有想到这一点! – ninopino1

2

如果if子句中的条件不成立,则该变量未被分配。在这种情况下,后面的返回引用一个未初始化的变量。

+0

不知道为什么这得到了downvoted。 – Patashu

1

这是一个私有方法,局部变量不会得到默认值,它们必须被初始化。 考虑一个情况,如果块没有进入控制,那么你的变量不包含任何值,因此错误。

相关问题