Java : Method return

标签 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));

}

解决欧拉计划时Problem 14 ,我在java中的方法返回中遇到了一个以前从未遇到过的奇怪问题。在上面的方法中,当数字最终为 1 时,它应该返回链的计数。但这是输入 13 的输出。

number 13 Chainlength 1

number 40 Chainlength 2

number 20 Chainlength 3

number 10 Chainlength 4

number 5 Chainlength 5

number 16 Chainlength 6

number 8 Chainlength 7

number 4 Chainlength 8

number 2 Chainlength 9

number 1 Chainlength 10

the number is finally 1 return chain length

THIS SHOULD NOT BE EXECUTED

THIS SHOULD NOT BE EXECUTED

-1

问题出在最后一部分,当数字变为 1 而不是返回 chainlength = 10 时,它会以某种方式跳过它并执行不应该执行的代码并返回 -1 。它对于 2 的所有幂(如 1、2、4、8)运行良好,但对于其他的则失败。

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

最佳答案

我没有详细查看,但我怀疑这一点:

else {
    chainLength++;
    findChainLength(number*3+1);
}

实际上应该是:

else {
    chainLength++;
    return findChainLength(number*3+1);
}

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

关于Java : Method return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209532/

相关文章:

java - Kafka 使用高级消费者 API 抵消提交请求

java - 用户缺少权限或找不到对象

java - 如何允许用户访问类的方法

java - 在静态方法中使用 this.var 时出错,如果使用任何其他 var 名称,错误就会消失

java - 找到最大的变量

java - 有效的 XML 文档必须有根标签

java - java从文本文件中的特定位置获取单词

java - 如何将war文件和自定义配置添加到wildfly docker镜像?

java - 我怎样才能在我的程序中用单词输出百位和十位数字

java - 我如何将java中不同类的方法链接在一起?