2016-07-24 9 views
1

Mein Code unten scheint in eine Endlosschleife zu gehen und ich bin verwirrt, warum. Ich auch ein Stück Code eingeführt, bis ich die Fehlermeldung ausgelöst:Warum geht mein Java-Code in eine Endlosschleife?

import java.util.Scanner; 

public class Average 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     int count = 0; 
     double sum = 0; 
     System.out.print("Enter a value: "); 
     boolean notDone = true; 
     while (notDone)//go into loop automatically 
     { 
      if(!in.hasNextDouble()){ 
       if(count==0){//this part generates bugs 
        System.out.print("Error: No input"); 
       }else{ 
        notDone = false; 
       } 

      }else{ 
       sum+= in.nextDouble(); 
       count++; 
       System.out.print("Enter a value, Q to quit: "); 
      } 
     } 
     double average = sum/count; 
     System.out.printf("Average: %.2f\n", average); 
     return; 
    } 
} 

Wie im Kommentar erwähnt, ist der Hauptschuldige diese Zeilen:

   if(count==0){ //this part generates bugs 
        System.out.print("Error: No input"); 
       } 

Dies hat den Zweck, wenn Fall ist, so dass der Benutzer bleibt in der Schleife und wird daran erinnert, dass eine gültige Eingabe erforderlich ist, bis eine gültige Eingabe empfangen wird, aber es ist nicht so, als ob es keine Möglichkeit gibt, die Schleife zu verlassen, da der Benutzer unter der Bedingung, dass das Programm empfangen wird, aus der Schleife ausbrechen kann gültige Eingabe (mindestens ein Doppelwert, gefolgt von einem Nicht-Doppelwert).

Prost.

Antwort

2

Ihr Code geht in eine Endlosschleife, weil die Bedingung keine Fortschritte macht, wenn kein double erkannt wird. Wenn dies der Fall ist, drucken Sie eine Nachricht, entfernen jedoch keine Junk-Daten vom Scanner.

Hinzufügen in.nextLine() zu dem bedingten wird dieses Problem beheben:

if(!in.hasNextDouble()){ 
    if (!in.hasNextLine()) { 
     // The input is closed - exit the program. 
     System.out.print("Input is closed. Exiting."); 
     return; 
    } 
    in.nextLine(); 
    ... // The rest of your code 
} ... 
Verwandte Themen