VB.NET - For-Schleife vorzeitig verlassen

AlexTh

Level-2
Beiträge
110
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in einer FOR-Schleife einen Vorgang wiederholen, bis eine Randbedingung erfüllt ist. Kann mir jemand sagen, wie man die Schleife richtig verlässt?

Nutze ich bei erfüllter Randbedingung Exit For oder setze ich den Zähler bei Erfüllung einfach auf die Anzahl der maximalen Wiederholungen?

Ich kann es momentan leider nicht testen, hat vielleicht jemand einen Beispielcode?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Viele Wege führen nach Rom...

Mein Ansatz wäre so etwas (pseudocode):

Code:
int cnt_i = 0;
do

code();

cnt_i++;
until (bedingung OR cnt_i >= max_cnt)


oder:
Code:
For i=0, i > 20 Do

code();

if (abbruchbedingung())
{
exit;
}

endfor;
 
Viele Wege führen nach Rom...

Ich frage mich, warum das eine FOR-Schleife sein soll. Was soll da in der Schleife gezählt werden?
"wiederholen, bis eine Randbedingung erfüllt ist" ist für mich eigentlich eine einfache DO-LOOP-Schleife.
Ein Schleifenzähler für maximale Wiederholungen ist möglicherweise abhängig von der Prozessorgeschwindigkeit, da macht eigentlich nur ein AnzahlVersuche-/Warte-/Zeit-Zähler Sinn - das kann man aber auch einfach als DO-LOOP-Schleife formulieren und hat dann eine klare Wiederhol- oder Abbruchbedingung ohne zusätzliche "Notausgänge".

Im Umfeld von SPS werden FOR-Schleifen eher verwendet wenn man vorhat, alle Schleifendurchläufe auszuführen oder wenn man die Zählvariable als Array-Index verwenden will.

Die einfache DO-LOOP-Schleife hat im Idealfall an nur einer Stelle übersichtlich die Abbruchbedingungen.
Code:
AnzahlVersuche = 0
DO
  AnzahlVersuche += 1
  fertig = code()
LOOP UNTIL fertig OR AnzahlVersuche >= 10

Die FOR-Schleife hat den Vorteil, daß man die Zählvariable nur einmal hinschreiben muß - sich also weniger vertippen kann. Sie suggeriert mir aber, daß sie eher 10 mal als nur 1 mal durchlaufen wird. Vorzeitiges beenden/verlassen der Schleife muß extra formuliert werden.
Code:
FOR AnzahlVersuche = 1 TO 10
  fertig = code()
  IF fertig THEN
    EXIT FOR
  END IF
NEXT

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
An DO-LOOP hatte ich ehrlich gesagt nicht gedacht, aber wenn man die Versuche zählt, dann wäre dies wirklich eine Möglichkeit.

Ich befinde mich geistig auf einer Sinumerik 840D mit Operate und muss mir dann erstmal anschauen, was die Steuerung alles hergibt bzw. wie die Befehle dort angewandt werden können.
 
Zurück
Oben