2012-03-06 117 views
0

我不會跑,如果我是你的話:的Javascript while循環計算

(function() { 
    var a = 1, 
     b = a, 
     c = b, 
     d = 1, 
     e = 1; 

    while (d != 0 && e != 0) { 
     b = Math.sqrt(a*a+a*a); 
     c = 2*a-b; 

     e = b%1; 
     f = c%1; 

     document.write(a); 

     a++; 
    } 

    document.write('a = ' + a); 
    document.write('b = ' + b); 
    document.write('c = ' + c); 

})();​ 

呀基本上我要一遍又一遍計算相同的公式,直到所有三個都與整數:

的Javascript然後將它們打印出來。請知道,直到最近我只使用jQuery。

這似乎只是無限重複,雖然我覺得它奇怪,它不打印a而計算,不知道如果多數民衆贊成如何javascript while循環的作品。

此外,爲什麼我不能使用Math.sqrt(2a^2)來計算B?

回答

3

Math.sqrt(2a^2)不起作用,因爲:

1)您必須當你想乘用*在Javascript中是明確的。 2a並不意味着2*a
2)^在Javascript中的含義與取冪不同。這意味着Bitwise XOR

這兩個在許多其他編程語言也是如此。 Math.sqrt(2*a*a)會爲你工作。

你的循環不會退出,因爲d != 0總是會因爲你從來沒有修改d從它的1

原值我不知道你正在嘗試與b%1c%做是真實的,但任何整數mod 1會給你0.

什麼都寫到屏幕上,因爲你的循環不會停止執行,因此不會給Web瀏覽器一個渲染任何東西的機會。

+0

「任何mod 1會給你0」是不正確的:「1.1%1」不爲零。 – 2012-03-06 05:18:42

+0

@ muistooshort是的,我不知道'%'是爲整數以外的數字定義的。謝謝。 – Paulpro 2012-03-06 05:36:47

3

它永不終止,因爲d永遠不會等於0.您將其初始化爲1,並且永不重新分配它。您還正在使用未聲明的變量f。那應該是d?我建議使用console.log而不是document.write。它比DOM更頻繁地刷新,並且通常具有更好的日誌功能。查看WebKit Inspector(Safari和Chrome),Firebug(Firefox)或F12 Developer Tools(IE)。

作爲PaulP.R.O。指出,你所期望的求冪語法是無效的JavaScript語法。如果你想這樣寫:

b = Math.sqrt(2 * Math.pow(a, 2));