2012-09-03 50 views
0

由於某種原因,第二個for循環從1開始。我意識到首先for循環i從一開始。這是應該的。然而,即使jfor環說,在0開始,它開始於1反正。For Loop開始於錯誤的編號

var findWinners = function (playersRay) { 
    var players = playersRay; 
    var results = new Array(); 

    //getdealers dealers hand and info 
    var dealerHand = players[0] 
    var dealerScore = dealerHand.getScore() 
    var dealerBust = dealerScore > 21 ? true : false; 

    //loops through all players; skips dealer (array position 0) 
    var numPlayers = players.length; 
    for (var i=1; i<numPlayers; i++) { 
      //loops through all the players hands. 
      //player might have more than 1 hand if he splits his cards 
     var player = players[i]; 
     var numHands = player.length; 
     results[i] = new Array(); 

     for (var j=0; j<numHands; j++) 
      var handScore = player[j].getScore(); 

      if (handScore > 21) { 
       results[i][j] = false;    
      } 
      else if (dealerScore > 21) { 
       results[i][j] = true; 
      } 
      else if (handScore > dealerScore) { 
       results[i][j] = true; 
      } 
      else { 
       results[i][j] = false; 
      } 
    } 
    return results; 
} 

它返回:[undefined, [undefined, true]]

應該返回此:[undefined, [true]]

以防萬一你想知道的。樣本playersRay是:[Object, [Object]]
對象具有對經銷商或玩家的手牌信息。

鏈接到全碼:https://docs.google.com/open?id=0BxvwY0fUFc3aMTdTOXU0b0ttamM

+3

這是不可能爲循環在別處1.查找您的問題被啓動。 –

+0

這就是我的觀點。我在第二個'for'循環中使用'console.log(j)'測試了這個。它只輸出'1'。之前沒有一個「0」。 – SgtOJ

+1

在問題仍然存在的情況下製作一個較小(可重現)的示例。你可以自己找到缺陷 - 有些東西可以告訴我們我們可以調試 - 這裏的代碼不是獨立運行。 – Konerak

回答

1

在Javascript中,當你忽略身邊的聲明中花括號,它只能運行的第一道防線。當我懷疑只有兩個時,這種行爲似乎只會忽略第一個索引。所以,如果你添加更多的迭代,你應該注意到它實際上只是運行最後指數。

例如:

for (var i = 0; i < 10; i++) 
    console.log('First line: ', i); 

    console.log('Second line: ', i); 

http://jsfiddle.net/MMQD8/

給出:

First line: 0 
First line: 1 
First line: 2 
First line: 3 
First line: 4 
First line: 5 
First line: 6 
First line: 7 
First line: 8 
First line: 9 
Second line: 10 

MDN explains it thusly

聲明

只要被執行爲條件 計算結果爲真實的陳述。要在循環中執行多個語句,請使用 語句塊({...})對這些語句進行分組。