2015-11-07 77 views
-3

我不明白while循環是如何解析信息的。有人可以解釋它是如何工作的嗎?有人能解釋一下這個while循環是如何工作的嗎?

private static int sumDigits(int number) { 
    int sum = 0;    //Initialize sum 
    int rem;     //Initialize remainder 

    while (number > 0) {   //If number is greater than 0 true 
     rem = number % 10;   //<-- ?? 
     sum += rem;     //<-- ?? 
     number = number/10;   //<-- ?? 
    } 
    return sum; 
} 
+1

你知道'%','+ ='和'/'做什麼嗎?如果你知道每個操作都做了什麼,你可以在紙上找出一個例子並解釋清楚。 – lurker

+1

「我創建了一種方法」,但你不明白它說什麼。你確定*它是*你*誰寫的?嘗試一個小程序並打印結果以查看它的實際運行情況。通過示例學習。 – ray

+1

我不明白你是如何創建一個方法,但不明白它的作用。如果這是作業和(我沒有指責)你從別的地方得到了代碼,請注意,教授檢查軟件抄襲,所以要小心:) – sam

回答

1

關鍵,理解這個代碼是使用兩個運營商 - 其餘的運營商%和整數除法運算符/

  • %運算符產生的餘數除以它的右邊。在% 10的情況下,這意味着「得到數字的最後十進制數字」
  • /除法運算符丟棄餘數,產生整數結果。用零除整數會丟棄最後一位數字。

例如,如果你開始n = 1234

int d = n % 10; 
int r = n/10; 

然後d4r123

在這一點上,應該清楚循環是如何進行終止的,以及它如何在迭代過程中累積數字的總和。

+0

因此,據我的理解,如果我們從n = 1234,d = 4,r = 123開始。循環會重複,d將= 3,r則會= 12並繼續?如果是這樣的信息存儲在哪裏,並將它們加在一起.. –

+0

@OhDavid想想一個'number'爲'1234'的例子。在第一次迭代之後,'number'將會是'123'。在第二次迭代之後,它將是'12'。在第三次迭代之後,它將是'1'。在第四次迭代之後,它將爲零,此時循環將終止。 – dasblinkenlight

+0

謝謝你澄清。你能解釋一下數字是如何被存儲的,如果變量被新的整數取代?還有什麼增加了數字? –

0

在評論中填充,你注意到你有麻煩

private static int sumDigits(int number) { 
    int sum = 0;    //Initialize sum 
    int rem;     //Initialize remainder 



while (number > 0) {   //If number is greater than 0 true 
    rem = number % 10;   //rem now contains the remainder of the number/10 
    //Keep in mind, number % 10 will give you the rightmost digit in your number 
    sum += rem;     //add the remainder to your running total 
    number = number/10;   //divide your number by 10 so you can find 
    //the next right most digit in your number 
} 
return sum; 
0

這個例子試圖總結的數量%所有的數字被用來獲取每個while循環的最後一個數字,除以10完成爲減少所有數字的數量和總和,請參閱我的內嵌評論

private static int sumDigits(int number){ int sum = 0; //初始化總和 int rem; //初始化其餘部分

while (number > 0) {   //If number is greater than 0 true 
     rem = number % 10; //remainder after division by 10 e.g 12%10=2 
     sum += rem; //sum=sum+rem    //<-- ?? 
     number = number/10;//reduce one number by dividing to 10   //<-- ?? 
    } 
    return sum; 
} 
0

讓我們來看一個例子。我們打電話sumDigits(1234)

第一次通過while環,number等於1234 rem = 1234 % 10,其評估對rem = 4作爲剩餘部分從除以1234通過圖10是4(這是最右邊的數字在number)。 sum += rem的計算結果爲sum += 4,因此sum的值爲4.由於numberint,存儲其自身的值除以10導致123存儲在number中。

通過while循環的第二次,number等於123 rem = 123 % 10,其評估對rem = 3作爲剩餘部分從除以123通過圖10是3(這是最右邊的數字在number)。 sum += rem評估爲sum += 3,因此sum的值爲7,因爲sum在最後一次循環迭代結束時等於4。由於numberint,存儲其自身的值除以10導致12存儲在number中。

重複這兩次,最後number等於零(因爲int(1/10) = 0),因此,您將退出循環,並且sum將包含數字的總和。

+0

完美。非常感謝你,這是最清晰的解釋,沒有超過我的頭。我現在完全理解它。 –

+0

我發現,通過函數/算法來處理示例數據是瞭解發生了什麼的最好方法。當你學習更復雜的數據類型時,它會變得更復雜一些,但正如他們所說的,最好的學習方法就是 - 學習代碼做什麼來做代碼的最好方法!祝你學習好運, –

相關問題