2015-09-27 61 views
-1

在我的代碼,我有一個行的代碼,使不同的NaN這個神祕的結果,總是:爲什麼是減法的結果等於爲NaN

console.log("The dragon now has"+ (4-totalDamage) + "health left!") 

現在totalDamage等於給自己加了一個名爲damageThisRound變量,這是一個從1到5的隨機整數(也包括1和5)。現在,我希望這條線來記錄一些像:

The dragon now has 1 health left! 

,而是,我得到:

The dragon now has NaNhealth left! 

爲什麼結果等於爲NaN,而不是像1,2或3的整數(這應該是(4-totalDamage)唯一可能的結果)?

全碼:

var slaying = true 
var youHit = Math.floor(Math.random()*2) 
var damageThisRound = Math.floor(Math.random*5 + 1) 
var totalDamage = 0 

while (slaying) { 
    if (youHit) { 
     console.log("You hit the dragon!"); 
     totalDamage += damageThisRound; 
     if (totalDamage >= 4) { 
      console.log("You defeated the mighty dragon!"); 
      slaying = false; 
     } else { 
      console.log("The dragon now has"+ (4-totalDamage) + "health left!") 
      youHit = Math.floor(Math.random() * 2); 
     } 
    } else { 
    console.log("You lose!"); 
    slaying = false; 
    } 
} 
+1

請顯示完整的代碼示例,以便我們可以重現該問題。具體說明'totalDamage'是如何設置的。 – j08691

+2

totalDamage可能是字符串格式。嘗試:'4-parseInt(totalDamage)'(並且確保totalDamage並非已經是NaN,與以前的隨機數相加) – dievardump

+0

'totalDamage'是'NaN'或不能轉換爲有效數字。提供一個完整的示例。 –

回答

3

通過var damageThisRound = Math.floor(Math.random()*5 + 1)

更換var damageThisRound = Math.floor(Math.random*5 + 1)你打電話Math.random()時忘了()

Math.random*5NaN 然後damageThisRoundNaN等爲totalDamage,因爲你嘗試添加NaN它。