簡體   English   中英

誰能為我解釋這段代碼?

[英]Can anyone explain this code for me?

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

這是數字總和的遞歸計算-只要您沒有消耗掉所有數字,它將最后一個與前面所有數字的總和相加。

sumOfDigits是一種接受int參數並且返回類型也是int的方法。 如果傳遞了0,則它將返回0,否則將返回num % 10 + sumOfDigits(num/10)

如果傳遞了非0的數字,則只要輸入的數字變為0,該數字就會繼續

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 result = 7+6+8

那是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;
}

此函數遞歸計算數字的總和。 首先,如果數字為0,則返回0,因為0的數字之和為0。然后,它計算num%為10的1s位置的數字,並將其加到其余數字的總和中個位,num / 10是剩余的位,它在該數字上調用sumOfDigits()。

此方法計算代表以10為基的整數的數字之和。 用%運算符遞歸調用該方法以分離數字中的數字,然后將它們相加以形成結果。

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

但是,如果在以10為底的底數中傳遞整數,則該方法仍會以10為底數給出結果

例如sumOfDigits(0b1011010) ->答案是9以10為基數sumOfDigits(0x532) ->答案是7以sumOfDigits(0x532)為基數

以下是對二進制和八進制值的更改,以獲取代表數字的總和

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

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

那是Java三元運算符,但是在大多數情況下,由於if-else語句更具可讀性,因此不使用它,它也可以執行三元運算符可以執行的相同功能。 但是,如果您想使代碼行更短,那么這是首選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM