试图通过if/else返回一个值
问题描述:
DRoot dRoot = new DRoot();
System.out.println("Answer from main : " + dRoot.digital_root(493193));
数字根是数字中所有数字的递归总和。给定n,取n的数字之和。如果该值有两位数字,则继续以这种方式减少直到产生一位数字。这只适用于自然数。试图通过if/else返回一个值
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;
}
}
正如你可以在上面看到,我试图通过测试“如果输出的值不等于1,则返回digital_root(output);
”但是一个if else语句返回一个数字,这回没有按” t工作,而是从返回下面的返回0,我放在那里清除返回错误。任何帮助解决这个问题?感谢
答
改变这一行 digital_root(output);
到 return digital_root(output);
有它也可以做
答
if(String.valueOf(output).length() != 1)
{
return digital_root(output);
} else {
return output;
}
答
那是因为你正在内的递归调用其他优化,如果条件和重写输出变量。
例如,如果您将输入1234传递给函数,那么在第一次调用期间输出将为10,并且当长度不等于1时,它会再次进行递归调用并将其转换为1并返回它,但你没有收集它返回的1,因为在递归调用过程中,方法调用结束了输出值的丢失。因此输出将仍10,因为它已经被执行,如果它会去最后一条语句,返回0
所以最好的解决办法是使用一个变量来收集结果
int result = 0;
if(String.valueOf(output).length() != 1)
{
result = digital_root(output);
} else {
result = output;
}
return result;