لا يمكن الخروج من متداخلة الحلقات لل
-
20-09-2019 - |
سؤال
ولدي الدالة التالية ولكن على الرغم من استخدام العبارة كسر، فإنه لا يبدو أن وقف بعد العثور على تطابق في صفيف:
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...")
}
}
}
}
المحلول
والخبر ... أرى.
وتستخدم تسمية، والآن يعمل:
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...")
}
}
}
}
نصائح أخرى
وإضافة فار منطقي يسمى جدت تهيئة إلى false.
والتغيير الظروف حلقة من
i < _playersList.length
إلى
i < _playersList.length && !found
وبعد ذلك قبل عطلة الخاص بك، وجدت مجموعة = صحيح
وbreak
سيتم قطع فقط من حلقة واحدة (أو التبديل) في وقت واحد.
وأعتقد أن هناك حل آخر مع أقل رمز:
private function checkMatch():void {
for (var i : int = 0; i < _playerList.length-1; i++) {
if (_playerList.indexOf(_playerList[i], i+1) > i) {
break;
}
}
}
لا تنتمي إلى StackOverflow