试图通过if / else返回一个值

时间:2017-10-16 17:00:29

标签: java return return-value

DRoot dRoot = new DRoot();
    System.out.println("Answer from main : " + dRoot.digital_root(493193));

数字根是数字中所有数字的递归和。给定n,取n的数字之和。如果该值有两位数,则以这种方式继续减少,直到产生一位数字。这仅适用于自然数。

public class DRoot {
    public static int digital_root(int num)
    {
        String temp = Integer.toString(num);
        int a[] = new int[temp.length()];
        int output = 0;

        for(int i = 0; i < temp.length(); i++) //getting individual numbers from passed in integer
        {
            a[i] = Integer.parseInt(temp.substring(i, i+1));
        }

        for (int i = 0; i < a.length; i++) //sum of all digits in the number
        {
            output += a[i];
        }
        if(String.valueOf(output).length() != 1)
        {
            digital_root(output);
        } else {
            return output;
        }
        return 0;
    }
}

正如您在上面所看到的,我试图通过if else语句返回单个数字,该语句测试&#34;如果输出值不等于1则返回digital_root(output);&#34;但是,这个返回不起作用,而是从返回的返回0返回0,我放在那里以清除返回错误。有什么帮助解决这个问题?感谢

3 个答案:

答案 0 :(得分:2)

更改此行 digital_root(output);return digital_root(output);

还可以进行其他优化

答案 1 :(得分:0)

    if(String.valueOf(output).length() != 1)
    {
        return digital_root(output);
    } else {
        return output;
    }

答案 2 :(得分:0)

这是因为你在if条件下进行递归调用并覆盖输出变量。

例如,如果将输入1234传递给函数,则在第一次调用期间输出将为10,并且当长度不等于1时,它将再次进行递归调用并将其转换为1并返回它,但是没有收集它返回的1,因为方法调用结束了递归调用期间输出中的值丢失。因此,如果它将转到最后一个语句并返回0

,则输出将仍为10并且已经执行

所以更好的解决方案是使用变量来收集结果

int result = 0;

 if(String.valueOf(output).length() != 1)
 {
    result =  digital_root(output);
 } else {
    result = output;
 }

 return result;