【发布时间】: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 并在不那么宽容的环境中练习。