2017-03-28 5 views
-1

Ich mache meine Hausaufgaben von meiner Uni, aber ich bin ziemlich mit dieser Frage zu kämpfen: In ganzen Zahlen lesen, bis der Benutzer -1 eingibt. Wenn es mindestens 3 Werte gibt, zeigen Sie den Durchschnitt ohne die größte und kleinste Zahl an. Dies ist mein Code, aber es scheint, als würde es nicht die größte und die kleinste Zahl loswerden, um den Durchschnitt zu erhalten.Min Max in BlueJ

import java.util.Scanner; 
public class MiddleAverage { 
    public static void main(String[] args) { 
     int sum; 
     int count; 
     int min = Integer.MAX_VALUE; 
     int max = Integer.MIN_VALUE; 
     double average; 
     sum = 0; 
     count = 0; 
     average = 0; 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Value: "); 
     int value = scanner.nextInt(); 
     while (value != -1) 
     { 
      if (value < min) 
      min = value; 

      if (value > max) 
      max = value; 

      System.out.print("Value: "); 
      value = scanner.nextInt(); 
      count++; 
      sum = sum + value; 
      average = sum/count; 
     } 
     if (value == -1) 
     { 
      System.out.println("Middle average is: " + average); 
     } 



    } 
} 

Haben Sie eine Idee dazu, bitte erklären Sie mir. Vielen Dank!

+1

Sie behalten die 'min' und' max' Werte im Auge, aber Sie tun nie etwas mit ihnen. Wenn Sie sie vor dem Drucken des Durchschnitts loswerden wollen, müssen Sie den Code schreiben, der das tut. –

+0

Hey vielen Dank für Ihren Vorschlag. Eine weitere Frage ist, dass der Code das innerhalb der "while" -Schleife oder innerhalb der "If" -Schleife ausführt. Danke – COI

+0

Dort _is no_ if Schleife. Es gibt nur wenn Aussagen. –

Antwort

0

In Ihrem Code berechnen Sie den Durchschnitt jedes Mal, wenn ein Wert eingegeben wird, dies ist ein wenig verschwenderisch, da Sie nur den Durchschnitt am Ende benötigen. (Und es macht es auch schwierig, die min & max zu entfernen!)

ich ein paar Änderungen am Code vorgenommen haben, werfen Sie einen Blick:

int sum = 0, count = 0; // Condensed a few lines 

int min = Integer.MAX_VALUE; 
int max = Integer.MIN_VALUE; 

Scanner scanner = new Scanner(System.in); 
int value; 

System.out.print("Value: "); 
value = scanner.nextInt(); 

while (value != -1) { 

    if (value < min) 
     min = value; 

    if (value > max) 
     max = value; 

    count++; 
    sum = sum + value; 

    System.out.print("Value: "); 
    value = scanner.nextInt(); 
} 

// You don't need to check if it's -1 because it MUST be in order to leave the loop 
if (count >= 3) { 
    System.out.println("Middle average is: " + (sum - max - min)/(count - 2)); 
} else { 
    // Less then 3 values 
} 

Prost!

+0

danke ich werde es dir ansehen vielen Dank! – COI

+0

Ich hoffe es hat geholfen! Es sollte beachtet werden, dass es ein paar verschiedene Möglichkeiten gibt, dies zu tun, ich habe versucht, dem zu folgen, was Sie bereits hatten. Vergessen Sie auch nicht zu upvote/accept hilfreich;) –

+0

Achten Sie auf Integer Division - Sie müssen einen der '/' Operanden auf einen Gleitkommatyp umwandeln oder Sie erhalten eine ganzzahlige Antwort. –