2010-01-12 2 views
3

내가 가지고있는 기능은 다음하지만 break 문을 사용에도 불구하고, 그것은 배열에서 일치 발견 후 중지하지 않는 것 :는 루프 중첩의 탈옥 수 없습니다

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

당신은 무엇을 의미합니까 그것은 일치하는 출력입니까? 디버거로 확인 했습니까? –

+0

나는 추적 진술에 근거하여 이전 추적이 일치하는 것을 보여준 후에도 계속 "계속"되고 있음을 의미했습니다. – redconservatory

답변

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

오, 그래, 작전이 양쪽 루프에서 빠져 나가는 것을 의미 할 수 있다고 생각해. 너는 그 문제에 대해 옳은거야. –

2

found라는 초기화 된 값을 추가합니다. 당신의 휴식, 그 전에

i < _playersList.length && !found 

i < _playersList.length 

에서

변경 루프 조건은 = 사실

+0

이 대답은 해결책이 될만한 가치가 있습니다. – mika

0

내가 적은 코드와 또 다른 해결책이 생각 : "중지하지 않는 것"

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