Java Break -> Endlosschleife

Knobi-Wan

Lt. Junior Grade
Registriert
März 2008
Beiträge
355
Hallo,
folgendes Problem:

Der folgende Code
Code:
  void eingabe(){
    try{
      int i=0;
      while(i<array.length){
        array[i]=Double.parseDouble(JOptionPane.showInputDialog("Wert des "+(i+1)+". Messwerts?"));
        System.out.println("check"+i);
        if(array[i]<-1000 || array[i]>1000){
          break;
        }
        System.out.println("check"+i);
        i++;
      }
    }
funktioniert nur, solange der Wert eines Array-Elements nicht <-1000 oder >1000 wird. Trifft das ein, sollte ja eigentlich das break in der bedingten Anweisung erreicht werden und die Schleife und damit auch die Eingabe unterbrochen werden. Stattdessen hängt das Programm und es öffnet sich eine java.exe, die mit 25% CPU-Auslastung läuft, auf meinem Quad-Core also offenbar single-threaded Vollast, weshalb ich davon ausgehe, dass eine Endlosschleife ausgeführt wird. Ich sehe allerdings den Fehler im Code nicht, bitte hier also um Hilfe.

PS: die "check"s sind nur dazu da, den genauen Auftrittsort des Problems festzunageln. Wenn die Zahl über 1000 ist, wird nur das erste ausgegeben, das zweite nicht, das Problem befindet sich also zwischen den beiden.
 
Sicher dass das Problem an der Stelle eintritt? Wieso ist unmittelbar vor dem break kein Sys-Out, warum nach der While-Schleife keines?

Was sagt denn der Debugger dazu? Breakpoints und schrittweises Ausführen funktioniert ja auch unter Java...
 
Ich hab es selbst schon gesehen, dass einige Anweisungen zu einem "Busy Wait" führen. Vieleicht ist das Problem ja in der JVM. Wenn es geht, aktualisiere die doch mal.
 
JVM habe ich gerade neu installiert, Problem besteht weiterhin.

Ich benutze den Java Editor, den Debugger dort hab ich ehrlich gesagt noch nie verwendet und weiß leider nicht, wie man den bedient. Auf der Editor-Homepage hab ich auch keine nähere Erklärung gefunden.

Ein SysOut direkt vor dem break wird auch ausgeführt.
 
Zuletzt bearbeitet:
Du bekommst also den Eingabedialog zu Gesicht? Wie oft? Und wir groß ist das Array?
Setz auch mal ein 'System.out.println("loop done");' direkt hinter die Schleife. Bekommst du diese Ausgabe?
 
Und einen Sysout nach der While-Schleife? oO Ist ja nicht so, dass ich das nicht explizit schon erwähnt hatte...

Ansonsten: Breakpoints setzen

http://www.javaeditor.org/index.php/Main_Page#Test_menu schrieb:
Test menu
With the commands of the test menu you execute a program under the control of the debugger. If a breakpoint is set in a source file and you start the program the debugger will be called. After reaching a breakpoint the executing is interrupted. You can then execute the program stepwise. During debugging the message window shows you detailed information about attributes, parameters, local variables, watch expressions and the call stack.
To debug a GUI program you set a breakpoint in the desired method. Start the GUI program and wait until the GUI form is shown. Then click on the button, which causes the execution of the method with the breakpoint.
 
Zuletzt bearbeitet:
Du hast nur gefragt warum da keiner ist aber nicht gesagt, dass er da auch einen hin machen soll. ;)
 
Dann hätte er es wenigstens begründen können, warum keiner nötig sei :P
Weil ich gehe davon aus, dass der Fehler nicht in dem geposteten Code-Stück liegt... das ist in etwa so, wie wenn man seinen Auto-Schlüssel in die Werkstatt bringt und sagt, dass das Auto nicht anspringt...
 
ah ja, sorry, ein SysOut direkt nach der Schleife wird auch ausgeführt.

Und offensichtlich hast du auch dahingehend Recht, dass der Fehler nicht im geposteten Code-Fragment steckt. Ich hatte 2 größer- und kleiner-Zeichen in einer folgenden Methode vertauscht.
 
Zurück
Oben