Java:方法返回

min*_*ven 0 java methods

public class EulerProblem14 {

 int chainLength=1;
public int findChainLength(int number){
    System.out.println("number "+number);
    System.out.println("Chainlength  "+chainLength);

    if(number==1){
       System.out.println("the number is finally 1 return chain length");
       return chainLength;
    }
   if(number%2==0){
       chainLength++;
     return findChainLength(number/2);
   }
   else {
       chainLength++;
       findChainLength(number*3+1);
   }
   System.out.println("THIS SHOULD NOT BE EXECUTED");
   return -1;
}
public static void main(String args[]){

    System.out.println(new EulerProblem14().findChainLength(13));

}
Run Code Online (Sandbox Code Playgroud)

在解决Project Euler Problem 14时,我遇到了一个奇怪的问题,在java中我从未遇到过的方法返回.在上述方法中,当数字最终为1时,它应返回链的计数.但这是输入13的输出.

13号链长1

40号链长2

20号链长3

10号链长4

5号链长5

16号链长6

8号链长7

4号链长8

2号链长9

1号链长10

数字最终是1个返回链长

这不应该被执行

这不应该被执行

-1

问题出现在最后一部分,当数字变为1而不是返回chainlength = 10时,它会以某种方式跳过它并执行永远不应执行的代码并返回-1.对于像1,2,4,8这样的2的所有权力,它运行良好,但对其他人来说则失败.

这对我来说可能是一个愚蠢的错误.尽管如此,对我来说这是一个问题.

Jon*_*eet 9

我没有仔细看过,但我怀疑这个:

else {
    chainLength++;
    findChainLength(number*3+1);
}
Run Code Online (Sandbox Code Playgroud)

应该是:

else {
    chainLength++;
    return findChainLength(number*3+1);
}
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够完全删除该方法的最后两行,因为它们无法访问.