2017-09-22 3 views
3

Ich versuche, wenn jeder Eingang liefert ein Benutzer zu bestimmen, die max oder min aus all ihren Eingängen ist, und weisen Sie dann die Eingabe in eine Variable high oder lowBenötigen Eingänge Bestimmung Maximum und Minimum Benutzer helfen

int inputnum = 0; 
    double sum = 0; 
    double lastinput = 0; 
    double high; 
    double low; 
    double average; 
    Scanner input = new Scanner(System.in); 
    high = 0; 
    low = 0; 
do { 
    System.out.println("Enter a number. Type 0 to quit."); 
    lastinput = input.nextDouble(); //reads input 
    sum += lastinput; //add to sum 
    if (lastinput != 0) { 
     inputnum += 1; //counts number of inputs (except 0) 
    } 
    if (lastinput > high && lastinput != 0) { 
     high = lastinput; 
    } 
    if (lastinput < low && lastinput != 0) { 
     low = lastinput; 
    } 

    average = (sum/inputnum); 

} while (lastinput !=0); //repeat unless user inputs 0 

Das Problem ist, dass ich die Variable nicht deklarieren kann, ohne ihm einen Wert zuzuordnen (zum Beispiel 0). Wenn ein Benutzer beispielsweise 3, 5 und 7 eingibt, wird der Wert low immer noch als 0 definiert.

Antwort

2

Das Problem ist mit folgenden Bedingung:

if (lastinput < low && lastinput != 0) { 
    low = lastinput; 
} 

Beachten Sie, dass die Variable low zunächst 0 ist. Also, wenn Ihr tatsächliches Minimum höher als 0 ist, dann wird es nicht den Wert von low beeinflussen, weil es ist 0. Es kann mehr logischen Lösungen sein:

  1. einen Sentinel-Wert verwenden: Initialisiere niedrig der höchstmögliche Wert von Doppel so dass die Benutzereingabe immer niedriger ist, wirkt daher den Wert von low

    double low = Double.MAX_VALUE; 
    
  2. ändern Sie den Zustand, wenn: Sie haben dieändern könnteBedingung für die Tatsache zu berücksichtigen, dass der Anfangswert 0.

    if (low==0 || (lastinput < low && lastinput != 0)) { 
        low = lastinput; 
    } 
    
+1

Zweite Lösung wird auch das seltsame Verhalten der ersten Lösung loswerden, wenn keine Eingaben gegeben sind (in diesem Fall hat die erste Lösung "low>' high "). +1 –

+0

Ja @JiriTousek. Aber das ist nur ein Eckfall und kann für jede Art und Weise gesorgt werden, die der Programmierer auch möchte. Es hängt von einem Coder zu einem Coder ab. – 97amarnathk

2

Das liegt daran, dass Sie low auf Null initialisieren, und alle eingegebenen Werte sind größer, so dass es nie aktualisiert wird. Sie müssen es dem höchstmöglichen Wert zuweisen - low = Double.MAX_VALUE;, also werden alle anderen Werte niedriger als es sein.

Ebenso sollten Sie hoch initialisieren, wie

high = Double.MIN_VALUE; 
+1

'double' ist es :) – nullpointer

+2

@nullpointer Recht, danke :) – TDG

+0

mit mehreren Testfällen, das funktioniert genau so, wie ich es erwarte. Wenn ich jedoch '-1', '-2', '-3' und dann '0' eingabe, wird mein Minimalwert als '4.9E-324' angezeigt. Was verursacht das? – bigfacts

1

Sie sollten einen Maximalwert für low als Standard verwenden oder aber die Bedingung lastinput < low für nicht-negative Eingänge immer false und 0 als Ausgang bleiben wären.

double low = Double.MAX_VALUE; 
0

Der Wert von lowhigh und durch den ersten Eingang abgezeichnet werden kann, bevor die Schleife ist.

Verwandte Themen