Java 无法返回对象类型?

Java 无法返回对象类型?,java,object,return,Java,Object,Return,我有一个方法,它应该在最后返回一个对象类型。我使用if语句并相应地返回对象类型,但我一直收到一个错误,说我没有返回任何东西?现在确定如何解决它 private Door pickADoor(Door door1, Door door2, Door door3) { Random generator = new Random(); int numOfDoors = generator.nextInt(3) + 1; if (numOfDoors ==

我有一个方法,它应该在最后返回一个对象类型。我使用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;
        }
    }

你错过了else街区。虽然逻辑上不应该有,但编译器无法知道这一点。因此,添加如下内容:

 else {
      throw new IllegalStateException ("cannot happen");
 }

编辑:或者简单地
断言false
,如下所示。这没有给出解释,但这里显然没有必要

您错过了else块。虽然逻辑上不应该有,但编译器无法知道这一点。因此,添加如下内容:

 else {
      throw new IllegalStateException ("cannot happen");
 }

编辑:或者简单地
断言false
,如下所示。这没有给出解释,但这里显然没有必要

它在抱怨,因为您没有在
if
语句中涵盖所有可能性,您只涵盖
numofoors
为1、2或3的情况。可能
nofOfDoors
只能是1、2或3,但编译器不知道这一点

一个可能的解决方案:在您的最后一个
else

改变

else  if(numOfDoors == 3) {
将来


因此,它涵盖了所有其他值。

它在抱怨,因为您没有涵盖
语句中的所有可能性。如果
语句只涵盖
numofoors
为1、2或3的情况。可能
nofOfDoors
只能是1、2或3,但编译器不知道这一点

一个可能的解决方案:在您的最后一个
else

改变

else  if(numOfDoors == 3) {
将来


因此,它涵盖了所有其他值。

问题是java认为可能存在这样一种情况,即
numofoors
可能不是1、2或3。然而,从逻辑上讲,我们知道您的随机数将是1-3(包括1-3),只是java没有意识到这一点

相反,您可以将上一次的
更改为以下内容:

        else {
          door3.choose();

           System.out.println("The player selected door C"); 
           return door3;
        }

    }

问题是java认为可能存在这样一种情况,
numofoors
可能不是1、2或3。然而,从逻辑上讲,我们知道您的随机数将是1-3(包括1-3),只是java没有意识到这一点

相反,您可以将上一次的
更改为以下内容:

        else {
          door3.choose();

           System.out.println("The player selected door C"); 
           return door3;
        }

    }

在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");

}

在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");

}

对于所有其他场景,您需要
return
语句。例如,如果
numofoors
大于3或小于1。在这种情况下,不会返回任何内容。这是不允许的。只需添加到代码中

else return null;

…或默认门。。。取决于您的逻辑

对于所有其他场景,您需要
返回
语句。例如,如果
numofoors
大于3或小于1。在这种情况下,不会返回任何内容。这是不允许的。只需添加到代码中

else return null;

…或默认门。。。取决于您的逻辑

我们可以看到您的门对象吗?@NoamHacker在这种情况下,问题可以在没有该知识的情况下得到回答。我们可以看到您的门对象吗?@NoamHacker在这种情况下,问题可以在没有该知识的情况下得到回答。或者简单地更改
}否则,如果(numofoors==3){
}否则{//always 3
AssertionError
更适合于从未发生过的事情。“这没有给出解释,但这里显然没有必要。”你不必使用
assert
,你可以做
新的AssertionError(“细节”)
。或者简单地将
}更改为
。否则如果(numfoors==3){
},则可以{//always 3
AssertionError
更适合于从未发生过的事情。“这没有给出解释,但这里显然没有必要。”您不必使用
assert
,您可以执行
新建AssertionError(“详细信息”)
。这是处理这种情况的一种非常糟糕的方法。如果达到了不应该达到的程度,至少应该抛出某种异常或错误。(例如:
AssertionError
)这就是我在评论中写的决定做什么我唯一的意图是显示返回丢失了但是我仍然会添加异常以便它成为可用的代码这是一种处理这种情况的非常糟糕的方法。如果你达到了一个不应该被忽略的点,至少你应该抛出某种异常或错误每个(例如:
AssertionError
)这就是我在评论中写的决定做什么我唯一的意图是表明返回丢失了但我仍然会添加例外以便它变得可用谢谢大家。我错过了这个简单的解决方案,但现在我知道了未来。这解决了问题。谢谢大家。我错过了这个简单的解决方案b但现在我知道了未来。这解决了问题。