Lies einmal am besten Dir Deine Schleifen- und Bedingungskonstrukte "laut" vor ...
- - ersetze die Wörter "While" mit "solange"
- "if" mit "wenn"
- Boolsche Ausdrücke wie "i < 0" mit "i ist kleiner als 0"
... und dann geh nochmal durch Deinen Code durch.
Du wirst sehen, dass Du zum einen an einigen Stelle eine unglücklich gewählte Programmlogik verwendest, und an anderen es überhaupt keinen Sinn macht.
Gerold hat Dir zwei funktionierende Beispiele geliefert, welche im Vergleich mit Deinen gut Aufschluss über den Aufbau und die Funktion geben sollten.
Vielleicht als Information: mit einem
break kannst Du immer nur aus dem aktuellen Schleifen-Kontrukt ausbrechen, in dem es eingegliedert ist (nicht aber evntuellen dort drum liegenden).
EDIT:
Wenn Du also zwei geschachtelte Schleifen (wie in Deinem Falle) hast, und brichts aus der "inneren" aus, so bleibt die "äussere" dennoch weiterhin bestehen.