2016-04-05 13 views
1

Ich versuche, ein einfaches Programm zu schreiben, das eine Anzahl von Eingaben vom Benutzer nimmt und die Höchstzahl (Höchste Nummer) Minzahl (Niedrigste Zahl) und den Durchschnittswert erzeugt.While-Schleifen werden ignoriert

Bisher habe ich den Code geschrieben, aber festgestellt, dass die zweite und dritte while-Schleife ignoriert wurden. Ich habe dies getestet, indem ich println ausgegeben habe. Ich bin neu in Java, aber jede Hilfe ist willkommen :)

public void analyseInput() { 
    UI.clearText(); 

    UI.print("input (end with 'done')");   
    double sum = 0; 
    double i=0; 

    for(i=0; UI.hasNextDouble(); i++){     //average 
     double amt = UI.nextDouble(); 
     sum = (sum + amt); 
    } 

    UI.println("test0"); 

    int maxAge = 0; 
    while(UI.hasNextDouble()){        //max 
     int age = UI.nextInt(); 
     while(age>maxAge){ 
      maxAge = age; 
      UI.println(maxAge); 
     } 
    } 

    double minAge = 0; 
    while(UI.hasNextDouble()){        //min 
     double age = UI.nextDouble(); 
     if(age<minAge){ 
      minAge = age; 
     } 
    } 

    double average = sum/i; 
    UI.nextLine();         // to clear out the input 
    UI.println(average); 
    UI.println(minAge); 

} 
+1

Die Bedingung für Ihre while-Schleifen ist 'UI.hasNextDouble()'. Wenn es keine Doppelgänger mehr gibt, wird dies als falsch ausgewertet und es wird offensichtlich nicht in die Schleife eintreten. –

Antwort

4

Nehmen Sie Ihre for-Schleife.

mit es leert ui.doubles.

Außerdem können Sie statt zweimal in Ihrem Stack die Berechnungen für Maximum, Minimum und Durchschnitt in einer Schleife durchführen. auch dein max und finder ist nicht richtig, weil es nur auf einer sortierten Liste funktionieren würde und wenn die Liste bereits sortiert wäre, würdest du nur auf jedes Ende davon schauen.

0

Wenn Sie das Mindestalter, Höchstalter, Durchschnitt für eine Reihe von Daten benötigen, anstatt es über eine Menge Zeit zu analysieren, können Sie es einfach auf einmal tun.

public void analyseInput() { 
    UI.clearText(); 

    UI.print("input (end with 'done')");   
    double sum = 0; 
    double i=0; 
    double maxAge = Double.MIN_VALUE, minAge = Double.MAX_VALUE; 

    for(i=0; UI.hasNextDouble(); i++){     //average 
     double amt = UI.nextDouble(); 
     sum = (sum + amt); 
     maxAge = Math.max(amt, maxAge); 
     minAge = Math.min(amt, minAge); 
    } 

    double average = sum/i; 
    UI.nextLine();         // to clear out the input 
    UI.println(average); 
    UI.println(minAge); 
} 
-1

Sie müssen alle Operationen tun (max, min, avg) in einem einzigen while-loop und Ihre Variable richtig initialisiert werden. Aktualisieren Sie die Min- und Max-Variablen für jeden neuen Doppelwert. Addiere alle Werte zu einem Akkumulator und berechne den Mittelwert nach der Schleife.

Verwandte Themen