在java中返回布尔值时出错
我正试着做运动,但a卡住了
这个类将询问用户是否仍然想玩游戏,回答是或否,并返回一个boolean
public boolean playAgain() {
char va;
boolean t = true;
boolean ry;
while (t = true) {
IO.outputln("Want to play again? (y/n)");
va = IO.inputCharacter();
if ((va == 'y') || (va == 'Y')) {
ry = true;
t = false;
} else if ((va == 'n') || (va == 'N')) {
ry = false;
t = false;
}
}
return ry;
这给了我下一个错误:
[ERROR] variable ry might not have been initialized.
可以从一开始就给变量ry
赋值吗?(因为在任何情况下,它都将在while循环中分配)
# 1 楼答案
在进入另一个作用域之前,不要给变量赋值。为了更好地说明这一点,以下是缩进更清晰的代码:
只声明
ry
,但不初始化它;它的初始化依赖于if
语句中的某些内容,该语句本身就在while
循环中当Java编译类似这样的东西时,它也会考虑分支,即“我会继续这个if分支吗?”,或者,“如果这个循环从未启动,会发生什么?”
以这种方式查看代码:
这是有效地消除循环,以防它“从不点火”。请注意,我们现在返回的变量中没有初始化任何内容。这是不可接受的,因此会出现编译错误,“变量
ry
可能尚未初始化。”它假设循环可能永远不会触发(尽管在本例中,这是非常正确的;您可能希望将其更改为
while(t == true)
或甚至while(t)
),并且它看到ry
在方法的后面使用,但没有值必须将变量
ry
初始化为一个值(例如boolean ry = false
)