so beenden Sie aus zwei verschachtelten for-Schleife in matlab
Ich habe eine while
Schleife, in der ich zwei for
Schleifen. Ich habe eine Bedingung in der innersten for
Schleife. Immer wenn diese Bedingung erfüllt ist, will ich verlassen von beiden der zwei for
Schleifen und weiterhin innerhalb der while
Schleife:
while (1)
for x=1:20
for y=1:30
if(condition)
end
end
end
end
Macht Matlab so etwas wie eine Anweisung mit Bezeichnung in Java, oder gibt es einen anderen Weg, dies zu tun?
möglich, Duplikat der Kann eine Matlab-M-Skript gestoppt werden, indem eine Anweisung in das Skript?
Je nachdem, wie Sie Ihren code organisiert, könnten Sie wickeln die Schleifen in eine Funktion und
Ich glaube nicht, dass es ein Duplikat,
Weiterführender link: Wie kann ich ausbrechen aus verschachtelten Schleifen mit BREAK-Befehl in MATLAB 7.7 (R2008b)?
Amit Kumar, @LuisMendo, überprüfen Sie heraus meine neuen Lösung. 🙂
Je nachdem, wie Sie Ihren code organisiert, könnten Sie wickeln die Schleifen in eine Funktion und
return
wenn die Bedingung erfüllt istIch glaube nicht, dass es ein Duplikat,
Weiterführender link: Wie kann ich ausbrechen aus verschachtelten Schleifen mit BREAK-Befehl in MATLAB 7.7 (R2008b)?
Amit Kumar, @LuisMendo, überprüfen Sie heraus meine neuen Lösung. 🙂
InformationsquelleAutor Amit Kumar | 2013-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine sehr einfache Antwort, die durch die Nutzung der Tatsache, dass die Prüfung von zahlreichen einfachen Bedingungen ist fast frei:
Dieser Ansatz ist sehr einfach, verallgemeinert auf eine beliebige Anzahl von loops und verhindert den Missbrauch der Fehlerbehandlung.
InformationsquelleAutor Dennis Jaheruddin
Einer immer so leicht eleganter Weg, als Luis Mendo ist. 😉
🙂 ............
InformationsquelleAutor A. Donda
Nur leicht eleganter aus als A. Donda Antwort (vermeidet die Prüfung der Bedingung zweimal):
quit
...im Vergleich zu was? Sie entweder test für
quit
oder für die Bedingung (was länger dauert), richtig?Im Vergleich zu, sagen wir, Ihre Lösung, die "flacht" der Schleife und verwendet
ndgrid
. Es gibt keine Notwendigkeit, um zu testenquit
in jeder loop-iteration, haben Sie schon die Prüfung für die Bedingung.Sie bedeuten in jeder iteration des äußere lopp, richtig? Ja, man könnte sparen. Aber das bottleneck, hier wäre die Prüfung innerhalb der inneren Schleife (das passiert 30 mal häufiger), und das hätte nicht vermieden werden.
Ich bin natürlich reden über die äußere Schleife 🙂 ich glaube, die zahlen sind willkürlich, und die abgeflacht-loop-Lösung ist eine sicherere Wette in jedem Fall. Aber ich bin einfach pingelig.
InformationsquelleAutor Luis Mendo
Etwas von Missbrauch, etwas übertrieben, aber hier ist es: noch eine weitere Möglichkeit,
Das schöne an diesem Ansatz ist, dass es funktioniert mit einer beliebigen Anzahl von verschachtelten Schleifen, und nur bewertet
condition
einmal ohne zu speichern das Ergebnis in einer Variablen.Inspiriert von tmpearce Kommentar.
Ihre zweite Antwort ist immer noch mein Favorit 🙂
Nein, du hast Recht. Wie ich schon sagte, ein bisschen Missbrauch. try/catch verwendet werden soll, für Fehler-management und nichts anderes. 🙂 Thx.
InformationsquelleAutor A. Donda
Ich bin mir dessen bewusst nur ein ganz unelegant Weg, dies zu tun: überprüfen Sie den Zustand zweimal.
InformationsquelleAutor A. Donda
Andere Möglichkeit, das vermeidet die Verwendung von zwei
break
Aussagen: wenn Sie nicht nichts tun, in der äußerenfor
Schleife außer dem Aufruf der innerenfor
- Schleife, können Sie Sie Zusammenführen:InformationsquelleAutor Luis Mendo
unmittelbaren Ausgang für beide for-Schleifen und fahren Sie mit dem bleiben der while-Schleife.
InformationsquelleAutor zlin