2016-07-05 62 views
0

你好,我正在做一個遊戲的基本計算器,但我面臨一個問題,我剛開始學習這種編程語言閱讀我發現的所有教程,現在我只是做一些代碼,並獲得一些經驗,所以我寫了一個計算代碼,我之前在php中編寫的計算代碼工作完美,但我在那裏使用不同的技術,所以在JavaScript中我創建了一個函數,將被稱爲計算按鈕將被按下,並創建一個對象存儲的5名球員全部數據來看一看:Javascript的基本計算總是得到NaN

function count(){ 

    function ninjas (name,dmg,dmgrate,dmggrow,speed,fury) { 
     this.name = name; 
     this.dmg = dmg; 
     this.dmgrate = dmgrate; 
     this.dmggrow = dmggrow; 
     this.speed = speed; 
     this.fury = fury; 
    } 
    var name = []; 
    var dmg = []; 
    var dmgrate = []; 
    var dmggrow = []; 
    var speed = []; 
    var fury = []; 
    var ninja = []; 
    for(var i = 0; i <5; i++){ 
     name[name.length] = document.getElementById("ninja" + (i +1)).value; 
     dmg[dmg.length] = document.getElementById("dmg" + (i +1)).value; 
     dmgrate[dmgrate.length] = document.getElementById("dmgrate" + (i +1)).value; 
     dmggrow[dmggrow.length] = document.getElementById("dmggrow" + (i +1)).value; 
     speed[speed.length] = document.getElementById("speed" + (i +1)).value; 
     fury[fury.length] = 50; 
     ninja[i] = new ninjas(name[i],dmg[i],dmgrate[i],dmggrow[i],speed[i],fury[i]); 
    } 

    ninja.sort(function(a, b){return b.speed - a.speed}); 

    var totaldmg; 
    var damagerate; 
    var damagegrow; 
    var furydmg; 

    for(var a = 0; a < 6; a++){ // 6 fight 
     for(var b = 0; b < 5; b++){ // 5 ninjas 
      if(ninja[b].name == "Kabuto"){ 
       if(ninja[b].fury == 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        furydmg = damagegrow + (damagegrow/100) * ((ninja[b].fury - 100)/0.25); 
        totaldmg += furydmg; 
        for(var c = 0; c < 5; c++){ // add fury each ninja by 25 
         ninja[c].fury +=25; 
        } 
        ninja[b].fury -= 25; 
        ninja[b].fury +=100; 
       }else if(ninja[b].fury > 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        totaldmg += damagegrow; 
        for(var c = 0; c < 5; c++){// add fury each ninja by 25 
         ninja[c].fury +=25; 
        } 
        ninja[b].fury -= 25; 
        ninja[b].fury +=100; 
       }else { 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        totaldmg += damagerate; 
        ninja[b].fury += 50; 
       } 
      } else { 
       if(ninja[b].fury == 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        totaldmg += damagegrow; 
        ninja[b].fury = 0; 
       }else if(ninja[b].fury > 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        furydmg = damagegrow + (damagegrow/100) * ((ninja[b].fury - 100)/0.25); 
        totaldmg += furydmg; 
        ninja[b].fury = 0; 
       }else { 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        totaldmg += damagerate; 
        ninja[b].fury += 50; 
       } 
      } 
     } 
    } 

    document.getElementById("result").innerHTML = totaldmg; 
}; 

我用幾個循環的所有數據存儲在自己的地方,然後每一步我做了車後的速度屬性使用功能的短短大家CK如果一切都好,但最終以某種方式,我仍然有結果這是NaN有人可以幫助我解決這個問題我檢查了我的代碼多次,但可以找到哪裏是錯誤的,也許有一些我不知道一個JavaScript和錯過

+0

嘗試將問題壓縮爲[mcve],它不僅可以幫助我們,還可以幫助您理解問題的來源 – BeyelerStudios

+1

您正在對字符串執行數學運算。 –

+0

[歡迎使用JavaScript](https://www.destroyallsoftware.com/talks/wat) – Nixon

回答

1

初始化變量總數爲0

這樣totaldmg + =值不會導致totaldmg =「未定義+值;

var totaldmg = 0; 
var damagerate = 0; 
var damagegrow = 0; 
var furydmg = 0; 

此外,從DOM讀取值時,將它們轉換爲數值作爲字符串常量將串連

for(var i = 0; i <5; i++){ 
    name[i] = parseInt(document.getElementById("ninja" + (i +1)).value, 10); 
    dmg[i] = parseInt(document.getElementById("dmg" + (i +1)).value, 10); 
    dmgrate[i] = parseInt(document.getElementById("dmgrate" + (i +1)).value, 10); 
    dmggrow[i] = parseInt(document.getElementById("dmggrow" + (i +1)).value, 10); 
    speed[i] = parseInt(document.getElementById("speed" + (i +1)).value, 10); 
    fury[i] = 50; 
    ninja[i] = new ninjas(name[i],dmg[i],dmgrate[i],dmggrow[i],speed[i],fury[i]); 
} 
+0

好吧,所以我不知道如果我必須設置0這些變量,但是我檢查DOM的typeof值他們是一個字符串,所以我用parseInt將它們轉換爲一個數字,現在它的工程罰款tnx你解釋 – yahoo5000

0

我不知道你想做什麼,代碼應該如何工作,但從這裏看你的代碼是我能識別的第一個錯誤:

name[name.length] 
dmg[dmg.length] 
dmgrate[dmgrate.length] 
speed[speed.length] 
//etc 

這是錯誤的。陣列中的元素從0開始並結束到array.length - 1。這意味着name[name.length]不存在。

這裏是一個JavaScript數組是如何工作的一些鏈接:

http://www.w3schools.com/js/js_arrays.asp

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

我希望這可以幫助你。我會繼續看到你的代碼,如果我發現任何其他錯誤,我將它們添加到我的回答

2)這是如何工作的:

for(var i = 0; i <5; i++){ 
    name[name.length] = document.getElementById("ninja" + (i +1)).value; 
    dmg[dmg.length] = document.getElementById("dmg" + (i +1)).value; 
    dmgrate[dmgrate.length] = document.getElementById("dmgrate" + (i +1)).value; 
    dmggrow[dmggrow.length] = document.getElementById("dmggrow" + (i +1)).value; 
    speed[speed.length] = document.getElementById("speed" + (i +1)).value; 
    fury[fury.length] = 50; 
    //... 
} 

如果你想添加元素在JavaScript中的數組,name[name.length]是不是它可以完成的方式。在上面的鏈接中,您可以看到如何使用array.push(arg);函數。

+0

你是錯誤有很多方法推動數組,我知道他們幾乎都選擇了這個wai,因爲我認爲它更適合我 – yahoo5000