【问题标题】:Cant return an object type?不能返回对象类型?
【发布时间】:2016-05-14 08:56:41
【问题描述】:

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

【问题讨论】:

  • 我们可以看看你的门对象吗?
  • @NoamHacker 在这种情况下,可以在没有这些知识的情况下回答问题。

标签: java object return


【解决方案1】:

你错过了 else 块。尽管从逻辑上讲不应该有,但编译器无法知道这一点。所以添加如下内容:

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

编辑:或者只是assert false,如下所示。这没有给出解释,但这里显然没有必要。

【讨论】:

  • 或者干脆把} else if (numOfDoors == 3) {改成} else { // always 3
  • AssertionError 更适合永远不会发生的事情。
  • "这里不解释,但这里显然没有必要。"你不必使用assert,你可以使用new AssertionError("details")。跨度>
【解决方案2】:

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

一个可能的解决方法:在你的最终else

改变

else  if(numOfDoors == 3) {

成为

else {

所以它涵盖了所有其他值。

【讨论】:

  • 谢谢大家。我错过了这个简单的解决方案,但现在我知道未来了。这解决了问题。
【解决方案3】:

问题是 java 认为可能存在numOfDoors 可能是 1、2 或 3 以外的数字的情况。但是,从逻辑上讲,我们知道您的随机数将是 1-3(含),只是java没有意识到这一点。

相反,您可以将最后一个 else if 更改为:

        else {
          door3.choose();

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

    }

【讨论】:

    【解决方案4】:

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

    else return null;
    

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 这是处理这种情况的一种非常糟糕的方法。如果你达到了不应该达到的点,至少你应该抛出某种异常或错误。 (例如:AssertionError
      • 这就是我在评论中写的决定做什么..我唯一的目的是表明缺少返回..但我仍然会添加异常以便它成为可用的代码跨度>
      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多