当前位置: 首页 > 知识库问答 >
问题:

尝试通过if/else返回值

孙弘博
2023-03-14
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;
    }
}

正如您在上面看到的,我已经尝试通过测试“如果输出的值不等于1,则返回digital_root(输出);”的if fe语句返回个位数。但是,这个返回不起作用,而是从我放在下面以清除返回错误的返回中返回0。对这个问题有什么帮助吗?谢谢

共有3个答案

钱钊
2023-03-14

这是因为您正在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;
左丘阳晖
2023-03-14
    if(String.valueOf(output).length() != 1)
    {
        return digital_root(output);
    } else {
        return output;
    }
索令
2023-03-14

将此行更改为digital_root(输出);改为返回digital_root(输出);

还可以进行其他优化

 类似资料:
  • Perl条件语句有助于决策,这需要程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的其他条件如果确定条件为假,则执行语句。 以下是大多数编程语言中的典型决策结构的一般性 - 数字0,字符串'0'和“”,空列表()和undef在布尔上下文中都是false ,所有其他值都为true 。 否定真正的价值! 或not返回特殊的假值。 Perl编程语言提供

  • 本文向大家介绍C# if, if...else, if... else if ,包括了C# if, if...else, if... else if 的使用技巧和注意事项,需要的朋友参考一下 示例 该if语句用于控制程序的流程。一条if语句根据Boolean表达式的值标识要运行的语句。 对于单个语句,braces{}是可选的,但建议使用。 该if还可以有一个else条款,将在案件条件的计算结果来执

  • if语句之后可以跟一个可选的else if...else语句,这对于使用单个if ... else if语句测试各种条件非常有用。 当使用if...else if…else语句时,请记住 - 一个if可以有零个或一个else语句,它必须在任何其他if之后。 如果语句可以有零到多个if,它们必须在else之前。 一旦else if成功,其余的if或else语句都不会被测试。 if ... else

  • 问题内容: 为什么这给了我一个丢失的退货陈述错误?每个if / else都有返回值,最后一个括号出现错误 问题答案: 每个语句都在一个语句内。虽然从逻辑上讲这是不可能的,但是当所有评估都不为真时,编译器需要返回。 我建议: 我认为,此解决方案可解决编译器问题并稍微提高可读性。 或者,有以下解决方案: 引发异常将使你可以退出方法而无需返回任何信息……因为可以说,如果到达最后一个,显然会出错。

  • if语句后面可以跟一个else if...else语句,这对于使用单个if ... else if语句测试各种条件非常有用。 当使用if, else if, else语句时,要记住几点。 一个if可以有零个或一个else的,它必须在任何其他if之后。 一个if可以有零到多个else if是,他们必须在其他之前。 一旦else if成功, else if任何其他else if else不会被测试。

  • if语句构造可以有一个或多个可选的else-if构造。 当if条件失败时,紧接着执行else-if 。 当else-if也失败时,执行其后继else-if语句(如果有的话),依此类推。 可选的else放在最后,当上述任何条件都不成立时执行。 所有其他语句(else-if和else)都是可选的。 else-if可以使用一次或多次。 else必须始终放在构造的末尾,并且只能出现一次。 语法 (Synt