Bedingte For-Schleife
-
Wie kann man den sowas elegant machen?
Wenn add größer 0 ist so:int add = 1; for(int i = start; i<stop; i+=add)Sonst so:
int add = -1; for(int i = stop; i>start; i+=add)
-
Hallo
int add = -1; for(int i = (add <= 0) ? stop : start; (add <= 0) ? i>start : i<stop; i+=add)bis bald
akari
-
Das sind ja dann 2 if, ist doch nicht besonders performant
-
VollKrass schrieb:
Sonst so:
int add = -1; for(int i = stop; i>start; i+=add)Sicher?
-
Hallo
wenn du das nicht willst, mußt du die Schleifen wieder auftrennen.
Zum Beispiel lohnt sich vielleicht eine Abspaltung des Schleifenkörpers in eine extra Funktion, die dann vpn zwei verschiendenen Schleifen aufgerufen wirdvoid Funct(int index) { // mit index arbeiten } ... int add = ...; // Wert festlegen if (add > 0) { for(int i = start; i<stop; i+=add) Funct(i); } if (add < 0) { for(int i = stop; i>=start; i+=add) Funct(i); }So hast du das Minimum an Bedingungen.
bis bald
akari
-
Michael E. schrieb:
VollKrass schrieb:
Sonst so:
int add = -1; for(int i = stop; i>start; i+=add)Sicher?
Könnte auch so sein, ist aber doch egal.
int add = -1; for(int i = stop-1; i>=start; i+=add)
-
Ou ja, mein Fehler.
Mehrere Fragen: Kann add auch andere Werte haben als 1 und -1? Kann die Schleife auch in umgekehrter Reihenfolge durchlaufen werden oder sind die einzelnen Durchläufe abhängig voneinander?
-
Michael E. schrieb:
Kann add auch andere Werte haben als 1 und -1?
nein
Kann die Schleife auch in umgekehrter Reihenfolge durchlaufen werden oder sind die einzelnen Durchläufe abhängig voneinander?
Sollte schon immer so wie angegeben durchlaufen werden.
-
Wenn die Reihenfolge nicht egal ist, dann fällt mir auch nichts besseres ein, als ein if davorzusetzen, dass start und stopp vertauscht.
-
Troll 
-
Michael E. schrieb:
Wenn die Reihenfolge nicht egal ist, dann fällt mir auch nichts besseres ein, als ein if davorzusetzen, dass start und stopp vertauscht.
Na dann, bleibt mir wohl nix anderes übrig.