web-dev-qa-db-fra.com

Trouver le maximum/minimum de valeurs dans une boucle for

J'ai cherché des réponses à cette question précise, mais je n'ai rien trouvé. Je dois trouver le maximum et le minimum des nombres entrés, mais les valeurs dont j'ai besoin sont dans la boucle for et je ne vois pas comment les utiliser en dehors de celle-ci.

System.out.print("How many numbers do you want to input?");

    int totalNumbers = console.nextInt();

    int minMax = 0;
    for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }
    System.out.println();

    int smallest = Math.min(minMax);
    System.out.println("Smallest = " + smallest);
    int largest = Math.max(minMax); 
    System.out.println("Largest = " + largest);

Je n'ai pas besoin de code modifié, mais simplement de quelque chose qui me permettra d'être sur la bonne voie. Merci!

6
Eyzek

Pouvez-vous remarquer le problème avec la boucle suivante?

for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }

Vous exécutez la boucle totalNumbers fois et chaque fois que vous créez une nouvelle int avec le nom inputNumbers et que vous stockez la valeur reçue de la console. De plus, où changez-vous la valeur de minMax? De plus, Math.min(or max) ne prend pas de paramètre unique et ne sera même pas compilé.

Maintenant vous avez peu d'options:

  1. Soit vous stockez tous les nombres dans un tableau, puis vous le parcourez pour les éléments min et max en utilisant une méthode utilitaire.
  2. Définissez des valeurs min et max et exécutez une boucle pour obtenir tous les éléments tout en gardant une trace des boucles min et max dans.

Je n'écris aucune solution car je veux que vous l'essayiez vous-même. 

4
i_am_zero

Les méthodes Math.min () et Math.max (), selon la documentation Oracle, ne peuvent comparer que deux valeurs. L'importation des valeurs dans un tableau, puis l'exécution d'opérations sur le tableau devraient vous permettre de trouver assez facilement les minimums et les maximums, ainsi que toute autre opération de données.

int[] numbers = new int[totalNumbers];

for (int i = 0; i < totalNumbers; i++) {
    numbers[i] = console.nextInt();
}

//Other Operations
4
Schuyler Reinken

Si je ne comprends pas bien ce que vous voulez, ne pouvez-vous pas simplement conserver une variable à l'extérieur de la boucle for et la vérifier?

int minMax = 0;
int smallest = 0;
int largest = 0;

for(int i = 1; i <= totalNumbers; i++){
    System.out.print("Number " + i + ": ");
    int inputNumbers = console.nextInt();
    if(inputNumbers > largest){
        largest = inputNumbers;
    } else if (inputNumbers < smallest){
        smallest = inputNumbers;
   }
}
System.out.println();

System.out.println("Smallest = " + smallest);
System.out.println("Largest = " + largest);

C'est le moyen le plus direct et le plus logique de vérifier les valeurs d'entrée et de décider si elles sont les plus petites ou les plus grandes connues à ce jour ( Edit: Sauf si vous require l'utilisation de Math.minMax)

3
Singular1ty

Pseudocode:

smallest := +∞
largest  := -∞

for each number read, n:
    if n > largest:
        largest := n
    if n < smallest:
        smallest := n

print the results

Allusion:

Java ints ne peut pas représenter ±. Utilisez Integer.MIN_VALUE et Integer.MAX_VALUE à la place.

2
DaoWen

Vous pouvez le faire en posant simplement si sinon la condition à l'intérieur de la boucle ... comme

  1. prenez 2 variables à la boucle extérieure, une pour la valeur maximale et une autre pour le magasin de valeurs minimales.
  2. la boucle intérieure attribue le numéro d'entrée aux valeurs min et max.
  3. après cela, entrez le nombre suivant avec ce chiffre et réaffectez les valeurs.
  4. à la fin de la boucle, vous trouverez les valeurs min et max.
1
Ranveer