任何人都可以为我解释这段代码吗?

时间:2014-08-23 06:54:50

标签: java

public int sumOfDigits(int num){
   return num == 0 ? 0 : num % 10 + sumOfDigits(num/10);
}

7 个答案:

答案 0 :(得分:3)

这是数字总和的递归计算 - 只要你没有消耗掉所有数字,它就会将最后一个数字加上所有数字的总和。

答案 1 :(得分:1)

sumOfDigits是一个接受int参数的方法,返回类型也是int。 如果传递0,那么它将返回0,否则它将返回num % 10 + sumOfDigits(num/10)

如果传递的数字不是0,只要输入的数字变为0

,这将继续

答案 2 :(得分:1)

return num == 0 ? 0 : num % 10 + sumOfDigits(num/10);

相当于:

if(num==0)
{
 return 0;
}
else
{
 return num % 10 + sumOfDigits(num/10); // this is recursive call. It gets called until num is reduce to 0
}

这主要表现如下:
如果num=768结果= 7+6+8

答案 3 :(得分:1)

这是Java三元运算符。它类似于其他语言的三元运算符。在这种情况下:

return <boolean expression> ? <if true> : <if false>;

您已发布递归算法来计算整数中的数字总和。

下面列出了两种等效方法:

public int sumOfDigitsIf(int num) { 
    if (num == 0) { 
        return 0; 
    } else {
        return num % 10 + sumOfDigitsIf(num / 10);
    }
}

public int sumOfDigitsLoop(int num) {  // useful to examine if you aren't used to recursive algorithms
    int value = 0; 
    while (num > 0) { 
        value += num % 10;
        num /= 10;
    }
    return value;
}

答案 4 :(得分:0)

此函数递归计算数字的位数之和。首先,如果数字为0,则返回0,因为0的数字之和为0.然后,它计算1s位数为num%10的数字,并将其加到剩余数字的总和中places,num / 10是剩余的位置,它在该数字上调用sumOfDigits()。

答案 5 :(得分:0)

此方法计算表示基数为10的整数的数字之和。使用%运算符递归调用该方法以分隔数字中的数字,然后添加它们以形成结果。

例如 - 234进2 + 3 + 4 = 9

但是,如果在基数10以外的基数中传递一个整数,该方法仍会给出基数为10的结果

例如sumOfDigits(0b1011010) - &gt;基数10的答案是90表示90     sumOfDigits(0x532) - &gt;基数10的答案是1330的7,

以下是二进制和八进制值的变化,以获得代表数字的总和

return num == 0 ? 0 : num % 2 + sumOfDigits(num / 2);

return num == 0 ? 0 : num % 8 + sumOfDigits(num / 8);

答案 6 :(得分:0)

这是一个Java三元运算符,但在大多数情况下它没有被使用,因为if-else语句更具可读性,这也可以执行三元运算符可以执行的相同功能。但是如果你想制作更短的代码行,那么这是首选。