2010-01-12 100 views
3

我有以下的功能,但儘管使用了break語句,它似乎並沒有被停止找到的陣列中的比賽後:不能突破的嵌套for循環

private function CheckMatch() { 

// _playersList is the Array that is being looped through to find a match 

      var i:int; 
      var j:int; 

      for (i= 0; i < _playersList.length; i++) { 

        for (j= i+1; j < _playersList.length; j++) { 
         if (_playersList[i] === _playersList[j]) { 
          trace("match:" + _playersList[i] + " at " + i + " is a match with "+_playersList[j] + " at " + j); 

          break; 

          } else { 
          // no match 
          trace("continuing...") 

          } 
         } 
        } 

       } 
+0

你的意思是什麼它輸出匹配嗎?你用調試器檢查過嗎? – 2010-01-12 16:58:28

+0

我的意思是,根據跟蹤報表,我仍然在前面的跟蹤顯示匹配之後看到「繼續」。 – redconservatory 2010-01-12 17:04:52

回答

10

啊......我明白了。

使用的標籤,現在它的工作原理:

private function CheckMatch() { 

// _playersList is the Array that is being looped through to find a match 

     var i:int; 
     var j:int; 

    OuterLoop: for (i= 0; i < _playersList.length; i++) { 

       for (j= i+1; j < _playersList.length; j++) { 
        if (_playersList[i] === _playersList[j]) { 
         trace("match:" + _playersList[i] + " at " + i + " is a match with "+_playersList[j] + " at " + j); 

         break OuterLoop; 

         } else { 
         // no match 
         trace("continuing...") 

         } 
        } 
       } 

      } 
1

break會一次只能打出一個循環(或開關)。

+0

哦,是的,我想這可能意味着突破兩個循環,在這種情況下,你是對的問題。 – 2010-01-12 16:59:27

2

添加一個名爲found被初始化爲false的bool var。集中找到從

i < _playersList.length 

i < _playersList.length && !found 

那麼你的破發,前

更改你的循環條件=真

+0

這個答案值得解決 - 對我來說似乎更清潔。 – mika 2013-10-26 16:21:00

0

我覺得用更少的代碼另一種解決辦法:「似乎沒有被停止」

private function checkMatch():void { 
    for (var i : int = 0; i < _playerList.length-1; i++) { 
     if (_playerList.indexOf(_playerList[i], i+1) > i) { 
      break; 
     } 
    } 
}