我真的覺得我看到你的循環應該做什麼,這是一個小功能。但正如一些人所指出的那樣,d
開始爲0,所以它總是最終0
只是改變d
爲1將停止你的無限循環:
for (d = 1; d < n; d *= 10);
但答案仍然是因爲它錯誤看起來你想要總結數字。 (例如1 + 2 + 3 = 6
,但是返回的結果是3.53
)
由於您正在處理個別數字,因此您不需要小數值,因爲在這裏使用float是不好的。你想要數字四捨五入。所以你需要將你的臨時變量改爲int。
還有最後一個數字被跳過的最後一件事。在這一點上,我得到3
作爲答案。在將while(n > 10)
更改爲while(n > 0)
後,返回正確的答案。
因此,代碼會是這樣:
public static int sumDigits(int n) {
int retVar = 0;
while (n > 0) {
int d;
for (d = 1; d < n; d *= 10);
d /= 10;
retVar += n/d;
n %= d;
}
return retVar;
}
有一個小竅門,有一個簡單的解決是先從最小的數字,而不是最大的同樣的問題的方式:
while(n > 0) {
retVar += n % 10;
n /= 10;
}
最後說明
如果我是正確的for循環,重要的是要帶回家的是,如果你寫這樣的東西這樣的話沒有人會認爲這是故意的。像這樣的語法實際上可以正常工作,但它很晦澀,更像是一種新奇。
環路可更換這樣這是更爲清晰,就像緊湊:
int d = 0;
while(d < n) {
d *= 10;
}
或者,如果你真的想:
int d = 0;
while(d < n) d *= 10; // not recommended but clearly has a body
如果我確實需要一個帶有空語句的'for'或'while'循環作爲一個正文,我將分號放在下一行,本身並縮進。這使得讀者更難以認爲這是一個錯誤。評論也有幫助。 – ajb
P.S.把這個弄出來好好工作。我們得到了很多這樣的問題,新手們在這裏最終放置了分號,因爲他們認爲他們必須在所有內容後面加上分號,以至於我無法理解這可能是有意的。 – ajb
這實際上完全是我所需要的。我應該指定'for()'循環做了什麼。我發佈這個之後不久嘗試設置d = 1,但沒有更新。如果我不使用愚蠢的網頁編譯器(iPad),那將會很好,因爲它仍然沒有返回結果。 – StuAlex