【问题标题】:Have to specify return in method, but I want the method to call itself again instead of returning必须在方法中指定返回,但我希望该方法再次调用自身而不是返回
【发布时间】:2015-01-01 14:19:27
【问题描述】:

我写了一个方法。它是模仿掷硬币,试图检测“连续三个正面”的情况。只要连续出现三个正面 (counter=3),该方法就会返回到达该点所需的迭代次数 (genCounter)。

问题是eclipse说这个方法应该返回“int”,但我确实返回了genCounter。(counter和genCounter都是int实例变量)。正如我从浏览互联网中了解到的那样,问题是我没有返回任何其他内容。但我不希望它返回任何东西,以防万一我想从头开始我的方法。

private int isThree(){
    String coin = rg.nextBoolean()?"Heads":"Tails";
    if (coin.equals("Heads")){
        counter += 1;
    }else{
        counter = 0;
    }
    genCounter += 1;
    if (counter == 3) {
        return genCounter;
    }else{
        isThree();
    }
}

【问题讨论】:

  • 函数的每个可能状态都必须返回一些东西。在您的代码中,如果 counter == 3 则它返回计数器,但在 else 条件下不返回任何内容。在那里添加返回。
  • 你需要一个while 循环,而不是递归。
  • 不正确,您可以使用递归实现任何“迭代”构造,并避免使用尾递归膨胀堆栈。 This 是理解我在说什么的一个很好的起点。
  • 问题是 Eclipse 说这个方法应该返回 "int" 不要相信 Eclipse 所说的一切;)
  • @AndreaRichiardi 在 Java 中练习递归学习当然没有错!雄心勃勃的程序员可以选择purely functional language 并在不那么宽容的环境中练习。

标签: java methods return


【解决方案1】:

但我不希望它返回任何东西,以防万一我想从头开始我的方法。

提示:要重复一些操作,请使用循环(这也将解决您当前的问题)。

您目前正在为此使用递归;虽然可行,但它确实使事情变得不必要地复杂化。

【讨论】:

  • 是的,我还没有学习递归,但我对它们有一点了解,所以我觉得试试它们会很酷。但你是对的,它让事情变得有点复杂。
  • @user3349993 用于学习目的,在 Java 中练习递归是没有问题的。但是,当您开始生成生产代码时,Java 并不是针对递归优化的语言。它会产生非常丑陋的堆栈跟踪,并留下难以扩展的代码。以下是有关递归编程的更多信息:programmers.stackexchange.com/questions/149167/…
【解决方案2】:

您需要告诉方法将调用的值返回给自身。变化:

isThree();

return isThree();

【讨论】:

    【解决方案3】:

    只是

    return isThree();
    

    else 应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2015-05-16
      • 1970-01-01
      • 2013-09-02
      • 2016-05-31
      • 2012-08-13
      • 2021-09-21
      相关资源
      最近更新 更多