Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-08-2009, 13:00   #1 (permalink)
Neuer User
 
Benutzerbild von domindian
 
Registriert seit: Apr 2003
Beiträge: 113
äußere schleife unterbrechen. quasi: break break;

Hallo Forum,

entsprechende Antwort auf folgendes scheint schwer zu finden: Gibt es eine Möglichkeit nicht nur aus der aktuellen Schleife (bspw. mit break auszubrechen sondern aus der aktuellen UND der nächsthöheren äußeren?

Also um folgenden eher unschshönen Behelf über eine Variable zu ersetzen:

Code:
var test:Array = ['eins','zwei','drei','vier','fünf'];
var has:String = "e";
var brk:Boolean = false;

for(var i in test){
  for(var c=0; c<test[i].length; c++){
    if(test[i][c]==has){
      //dosomething();
      // abbrechen, alle beide schleifen. hab was ich wissen wollte.
      brk = true;
      break;
    }
    if(brk) break;
  }
}
also dieses Beispiel ist natürlich beliebig und ihr Sinn nicht von relevanz. Um's Prinzip wüsse ich gerne bescheid.

Danke, lg
d~
domindian ist offline   Mit Zitat antworten
Alt 15-08-2009, 13:23   #2 (permalink)
GetYourYoYosOut
 
Benutzerbild von harnisch
 
Registriert seit: Jun 2002
Ort: Hamburg
Beiträge: 620
Du könntest das Ganze in eine Funktion schreiben und die Schleifen mit return beenden.

PHP-Code:
function func(){
    for (var 
i:Number 010i++){
        
trace("i: "+i);
        
        for (var 
j:Number 010j++){
            
trace("\tj: "+j);
            
            if(
== 3){
                return;
            }
            
        }
    }
}

func(); 

Geändert von harnisch (15-08-2009 um 13:25 Uhr)
harnisch ist offline   Mit Zitat antworten
Alt 15-08-2009, 13:49   #3 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
ActionScript:
  1. var arrays:Array = [["a", "b", "c", "d"],
  2.         ["e", "f", "g", "h"],
  3.         ["ae", "bf", "cg", "dh"],
  4.         ["ei", "fj", "gk", "hl"]];
  5.  
  6. for (var i:Number = 0; i < arrays.length; ++i)
  7. {
  8.     trace(arrayOfStringsHasCharacter(arrays[i], "a"));
  9. }
  10.  
  11.  
  12. function arrayOfStringsHasCharacter(array:Array, char:String):Boolean
  13. {
  14.     var string:String = "";
  15.     for (var i:Number = 0; i < array.length; ++i)
  16.     {
  17.         string = array[i];
  18.         if(string.indexOf(char, 0) > -1)
  19.             return true;
  20.     }
  21.     return false;
  22. }

Geändert von Omega Psi (15-08-2009 um 14:05 Uhr) Grund: Shorter Alg.
Omega Psi ist offline   Mit Zitat antworten
Alt 15-08-2009, 13:53   #4 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
mal abgesehen davon, das dein beispiel keinen sinn macht, was soll denn
PHP-Code:
test[i][c
in deinem beispiel sein, hast du das break falsch positioniert.
PHP-Code:
var test:Array = ['eins','zwei','drei','vier','fünf'];
var 
has:String "e";
var 
brk:Boolean false;

for(var 
i in test){
if(
brk) break;
  for(var 
c=0c<test[i].lengthc++){
    if(
test[i][c]==has){
      
//dosomething();
      // abbrechen, alle beide schleifen. hab was ich wissen wollte.
      
brk true;
      break;
    }
    
  }

__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 16-08-2009, 10:42   #5 (permalink)
Neuer User
 
Benutzerbild von domindian
 
Registriert seit: Apr 2003
Beiträge: 113
Hallo!

Danke für eure Antworten! (und schönen Sonntag übrigens)

Ja, ich finde auch, dass es wohl meistens am saubersten ist das ganze in eine funktion zu verlagern und diese mit return zu beenden. Das ergab sich auch in dem tatsächlichen Beispiel, aus dem meine Frage entstand.

Aber damit kann ich wohl davon ausgehen - und eigentlich war es nur das, was mich neugierig machte, - dass es in actionscript eben keine Möglichkeit gibt mittels break oder continue mehr als die aktuelle Schleife direkt zu beeinflussen.

und,
@mooseMash: Ansich sollte hier test[i][c] den einzelnen Buchstaben des jew. Strings ausgeben. Aber weil nur symbolisch ist der Code weder getestet noch zum bearbeiten von Strings zu empfehlen. Sry. Folgendes wäre hier wohl weniger verwirrend gewesen:

Code:
for(...){
  for(...){
   // gibt es eine Möglichkeit beide Schleifen 
   // von hier aus direkt abzubrechen?
  }
}
und: vollkommen richtig, mein if(brk) break; war innerhalb der inneren Schleife natürlich falsch platziert, ob es aber davor oder danach steht ist in dem Fall egal.

lg und Sonne,
d~
domindian ist offline   Mit Zitat antworten
Alt 16-08-2009, 10:54   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Um nochmal zusammen zu fassen: In AS2 beeinflussen break und continue ausschließlich die innerste aktuelle Schleife.

Seit AS3 gibt es auch labels für Schleifen, besonders schön finde ich das allerdings nicht.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
äußere, break, schleife, unterbrechen, verschachtelt

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele