2010-01-12 130 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; 
     } 
    } 
}