无法返回对象类型?

时间:2016-02-04 16:23:16

标签: 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 == 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;
        }
    }

5 个答案:

答案 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;

...或默认门......取决于您的逻辑