我有一个方法应该在最后返回一个对象类型。我使用if语句并相应地返回对象类型,但我一直收到一个错误,说我没有返回任何东西?现在确定如何解决它。
private Door pickADoor(Door door1, Door door2, Door door3) {
Random generator = new Random();
int numOfDoors = generator.nextInt(3) + 1;
if (numOfDoors == 1) {
door1.choose();
System.out.println("The player selected door A");
return door1;
} else if (numOfDoors == 2) {
door2.choose();
System.out.println("The player selected door B");
return door2;
} else if (numOfDoors == 3) {
door3.choose();
System.out.println("The player selected door C");
return door3;
}
}
答案 0 :(得分:2)
你错过了else块。虽然逻辑上不应该有,但编译器无法知道。所以添加如下内容:
else {
throw new IllegalStateException ("cannot happen");
}
修改:或只是assert false
,如下所示。这没有给出解释,但这里显然没有必要。
答案 1 :(得分:1)
这是抱怨,因为您没有涵盖if
声明中的所有可能性,您只涵盖numOfDoors
为1,2或3的情况。也许nofOfDoors
只能是1,2或3,但编译器不知道。
一种可能的解决方法:在您的最终else
变化
else if(numOfDoors == 3) {
是
else {
所以它涵盖了所有其他价值观。
答案 2 :(得分:1)
问题是java认为可能存在numOfDoors
可能是1,2或3以外的数字的情况。然而,逻辑上,我们知道您的随机数将来自1-3包容性,这只是java没有意识到这一点。
相反,您可以将上一个else if
更改为此:
else {
door3.choose();
System.out.println("The player selected door C");
return door3;
}
}
答案 3 :(得分:0)
你在if块之后缺少一个return语句,
private Door pickADoor(Door door1, Door door2, Door door3) {
Random generator = new Random();
int numOfDoors = generator.nextInt(3) + 1;
if (numOfDoors == 1) {
door1.choose();
System.out.println("The player selected door A");
return door1;
}
else if (numOfDoors == 2) {
door2.choose();
System.out.println("The player selected door B");
return door2;
}
else if (numOfDoors == 3) {
door3.choose();
System.out.println("The player selected door C");
return door3;
}
// decide what should you do here
throw new IllegalStateException("only 3 doors selectable");
}
答案 4 :(得分:0)
您需要return
语句用于所有其他方案。示例如果numOfDoors
大于3或小于1.在这种情况下,不会返回任何内容。这是不可接受的。只需添加到您的代码
else return null;
...或默认门......取决于您的逻辑