2017-03-28 2 views
-1

Je fais mes devoirs de mon université mais je suis assez aux prises avec cette question: Lire en nombres entiers jusqu'à ce que l'utilisateur entre -1 -1. S'il y avait au moins 3 valeurs, montrez la moyenne en excluant le plus grand et le plus petit nombre. Ceci est mon code mais semble ne pas se débarrasser du plus grand et le plus petit nombre pour obtenir la moyenne.Min Max dans 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); 
     } 



    } 
} 

Pourriez-vous m'expliquer? Je vous remercie!

+1

Vous gardez la trace des valeurs 'min' et' max', mais vous ne faites jamais rien avec eux. Si vous voulez vous débarrasser d'eux avant d'imprimer la moyenne, vous devrez écrire le code qui fait cela. –

+0

Hey merci pour votre suggestion. Une autre question est que le code fait cela dans la boucle "while" ou dans la boucle "If". Merci – COI

+0

Il n'y a pas de boucle if. Il n'y a que si des déclarations. –

Répondre

0

Dans votre code, vous calculez la moyenne chaque fois qu'une valeur est saisie, c'est un peu inutile car vous n'avez besoin que de la moyenne à la fin. (Et il est également difficile de retirer le min & max!)

J'ai fait quelques changements à votre code, jetez un oeil:

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 
} 

Cheers!

+0

merci je vais y jeter un oeil merci beaucoup! – COI

+0

J'espère que cela a aidé! Il convient de noter qu'il existe plusieurs façons de faire cela, j'ai essayé de suivre ce que vous aviez déjà. Aussi, n'oubliez pas de upvote/accepter utile;) –

+0

Attention à la division en nombre entier - vous devez convertir l'un des opérandes '/' en un type à virgule flottante ou vous obtiendrez une réponse intégrale. –