2016-09-10 58 views
-2

我正在嘗試編寫代碼,它將採用所有兩位數的數字,將它們分隔爲數字,將數字平方並添加它們。之後,它將重複這個過程,直到製作一位數字的號碼。爲什麼在Javascript中的這段代碼只返回一個值

for (i=11;i<25;i++) { 
    var array = (i).toString(10).split("").map(Number) 
    var element0 = array[0] 
    var element1 = array[1] 
    var total = (element0*element0)+(element1*element1) 
    while (total>9) { 
    array = (total).toString(10).split("").map(Number) 
    element0 = array[0] 
    element0 = array[1] 
    total = (element0*element0)+(element1*element1) 
    } 
    if (total == 1) { 
    console.log(i + " is correct") 
    } 
} 

每當我運行此過程時,瀏覽器凍結,我必須強制關閉它。我是Javascript新手,所以我會很感激任何幫助。謝謝。

+0

大約在第8行,您將'array0'重新分配'array0',然後'array [1]' 。這意味着'element0'將始終是'array [1]'的值。 – Soviut

+3

1.這是什麼?它是「只返回一個值」還是凍結? 2.請求幫助時,請將您的代碼可讀地縮進。 3.要知道爲什麼它凍結(循環無止境)的最好方法是使用內置於瀏覽器中的功能齊全的調試器,逐步瀏覽代碼,逐句聲明,觀察值。所以最好的選擇是搜索如何使用內置在瀏覽器中的調試器。 (或者現在來調試NodeJS,如果這是你運行這個的地方。)4. 11-24(含)不是「所有的兩位數字」。 –

回答

0

你應該調試你的代碼,例如,一個簡單的警告是這樣的:

for (i=11;i<25;i++) { 
var array = (i).toString(10).split("").map(Number) 
var element0 = array[0] 
var element1 = array[1] 
var total = (element0*element0)+(element1*element1) 
while (total>9) { 
array = (total).toString(10).split("").map(Number) 
element0 = array[0] 
element0 = array[1] 
total = (element0*element0)+(element1*element1) 
alert(total) 
} 
if (total == 1) { 
console.log(i + " is correct") 
} 
} 

將揭示你的問題,腳本保持獲得相同的三個數字每三個迭代!

P.S.使用分號終止您的語句是一種很好的做法,即使它不是必需的:)

+0

不要使用'alert'調用進行調試。使用實際的調試器。嘿,如果你真的想把你的調試邏輯燒入你的代碼中,那麼只需使用'debugger'關鍵字,它會在遇到時跳過一個斷點。如果你不想使用調試器(出於某種原因)和/或需要反饋一些代碼在某些時候正在做什麼,那麼'console.log'(或'info','trace','warn' ,'錯誤'等)你需要的信息。調用'alert'是一種非常糟糕的做事方式,如果你想在不修改的情況下檢查代碼,這是不可用的,它是特別糟糕的,因爲它可以導致或屏蔽一些錯誤。 – vlaz

+0

我完全同意你的職業比賽,但是因爲這段代碼對我來說似乎只是一個小小的練習,所以我爲他付出的努力將是一個非常基本的工具,例如「警戒」:) –

+0

我不同意。使用'alert'不是也不應該用作基本工具,因爲它不是。它會影響你的代碼和你看到的更多方式,而不是很舒服,在很多情況下,如果它不改變你的代碼產生的結果,它會給你錯誤的結果。實際上不應該鼓勵使用'alert'來進行調試。特別是因爲'console.log'會給你等價的或者_better_輸出而沒有任何缺點。而你所需要做的只是用另一個呼叫替換一個呼叫,就是這樣。此外,日誌聲明可以保留下來,並且在將來也會有所幫助。 – vlaz

相關問題