Wie können Endlosschleifen bei der Verwendung von Schleifen vermieden werden?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Endlosschleifen können durch sicherzustellende Abbruchbedingungen, eine Begrenzung der Durchläufe oder einen Notausstieg mit einer zusätzlichen Bedingung vermieden werden.

Indem Du dir den Code gut überlegst. Eine Faustregel gibt es nicht.

Sorg dafür, dass Du einen Ausstieg aus der Schleife hast und gehe gedanklich jeden möglichen Ablauf durch und prüfe: Wird dieser Ausstieg auch erreicht?
Dieser Ausstieg kann eine vorher bestimmte Bedingung sein, die in der Schleife aktualisiert wird, oder ein expliziter Ausstieg (break) in der Schleife.

Und dann sollte es auch UnitTests geben, das verhindert nicht, dass es in Zukunft doch einen Fehler gibt, aber es verhindert, dass Du eine durch UnitTests abgedeckte Funktion später kaputt machst.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler
Von Experte Roderic bestätigt

Durch Sorgfalt.

Vor der Schleife sollte man die Bedingung auf neutral setzen und sich nicht darauf verlassen, dass das anderswo im Programm korrekt gemacht wurde. Wenn du z.B. eine Schleife durchläufst, bis ein Zähler auf 10 ist und er von einem anderen Durchlauf schon auf 11 ist, dann Gute Nacht.

Gleitkommazahlen sollte man nicht auf = 0 prüfen, wegen Rundungsfehlern, sondern auf einen Maximalwert, <= 10¹⁰ z.B.

Kommt halt immer darauf an, was die Abbruchbedungung ist.

Indem man bei jedem Durchgang der Schleife prüft, ob eine der Abbruchbedingungen bereits erfüllt ist, und inden man auch auf Werte prüft, die man eigentlich nicht erwartet

Indem man doppelt und dreifach prüft, ob die Abbruchbedingung in jedem Fall in endlicher Zeit erfüllt sein wird.

Und wenn man sich da nicht 1000%-ig sicher ist, indem man eine zweite Abbruchbedingung vorsieht, die die Schleife nach x Durchläufen oder y Millisekunden garantiert beendet.

Woher ich das weiß:Berufserfahrung