2010-01-12 14 views
3

je la fonction suivante, mais malgré l'utilisation de l'instruction break, il ne semble pas être arrêter après qu'il trouve une correspondance dans le tableau:ne peut pas sortir de boucles imbriquées pour

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

Que voulez-vous dire Est-ce que la sortie correspond? Avez-vous vérifié avec un débogueur? –

+0

Je voulais dire, d'après les instructions de trace, je vois encore "continuer" après que la première trace révèle une correspondance. – redconservatory

Répondre

10

Ahh ... Je vois.

Utilisé une étiquette, maintenant il fonctionne:

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 sera ne cassez qu'une seule boucle (ou commutateur) à la fois.

+0

Oh, oui, je suppose que l'opération pourrait signifier sortir des deux boucles, auquel cas vous avez raison sur le problème. –

2

Ajoutez un bool var appelé trouvé initialisé à false.

Modifier vos conditions de boucle de

i < _playersList.length 

à

i < _playersList.length && !found 

alors avant votre pause, Obtenue = true

+0

cette réponse mérite la solution - me semble beaucoup plus propre. – mika

0

Je pense qu'il ya une autre solution avec moins de code: « ne semble pas être arrêter »

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