Trouver la plus petite valeur du tableau en java


J'essaie d'obtenir la valeur sum, average, max et min de l'entrée utilisateur dans le tableau. sum, average et max donne la sortie correcte. Mais la valeur min ne fonctionne pas. Où est-ce que je fais mal quelqu'un pourrait-il m'aider à le savoir?

import java.util.Scanner;

public class minMaxSumAverage {
    public static void main(String args[]) {
        int n, sum = 0, max, min;
        double average = 0;

        Scanner s = new Scanner(System.in);
        System.out.println("Enter elements you want to input in array: ");
        n = s.nextInt();
        int a[] = new int[n];
        max = a[0];
        min = a[0];
        System.out.println("Enter all the elements:");
        for (int i = 0; i < n; i++) {
            a[i] = s.nextInt();
            sum += a[i];
            average = (double) sum/a.length;
            if (a[i] > max) {
                max = a[i];
            }
            if (a[i] < min) {
                min = a[i];
            }
        }
        System.out.println("Sum is: " + sum);
        System.out.println("Average is: " + average);
        System.out.println("Max is: " + max);
        System.out.println("Min is: " + min);
    }
}

Sortie:

Enter elements you want to input in array: 
5
Enter all the elements:
25
5
10
6
4
Sum is: 50
Average is: 10.0
Max is: 25
Min is: 0

La valeur min doit être 4.

Author: Mark Rotteveel, 2019-07-10

6 answers

Je vous ai mis à jour le code. Veuillez vérifier le code suivant pour obtenir la valeur min de toute la liste des éléments.

Entrée :

Entrez les éléments que vous souhaitez entrer dans le tableau:

5

Entrez tous les éléments:

25

5

10

6

4

Sortie :

La Somme est: 50

La moyenne est: 10.0

Max est: 25

Min est: 4

        Scanner scan = null;
        try {
            int n, sum = 0, max, min;
            double average = 0;
            scan = new Scanner(System.in);
            System.out.println("Enter elements you want to input in array: ");
            n = scan.nextInt();
            int a[] = new int[n];
            max = a[0];
            System.out.println("Enter all the elements:");
            for (int i = 0; i < n; i++) {
                a[i] = scan.nextInt();
                sum += a[i];
                average = (double) sum/a.length;
                if (a[i] > max) {
                    max = a[i];
                }
                /**
                // from here remove logic for get min value.
                if (a[i] < min) {
                   min = a[i];
                }
                **/
            }
            min = a[0];
            for(int i=0;i<a.length;i++){
                if(a[i] < min){
                  min = a[i];
                }
              }
            System.out.println("Sum is: " + sum);
            System.out.println("Average is: " + average);
            System.out.println("Max is: " + max);
            System.out.println("Min is: " + min);
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            scan.close();
        }

 1
Author: Vimal, 2019-10-22 05:20:52

À partir de Java-8 vous pouvez utiliser des flux pour ce faire en une seule ligne:

int[] a = new int[] { 20,11,2,3,4,7,8,90 };
int min = Arrays.stream(a).min().getAsInt();

Pour obtenir l'élément maximum, il suffit de remplacer le .min() par .max()


Pour obtenir la somme: Arrays.stream(a).mapToInt(Integer::intValue).sum();

 1
Author: Vishwa Ratna, 2019-08-16 10:03:34

Parce que min est initialisé avec 0. Et dans votre boucle, vous demandez simplement si votre nombre actuel est inférieur à 0.

Réessayez en attribuant la première valeur de votre tableau à min.

Alors cela devrait fonctionner.

 0
Author: user10929745, 2019-07-10 18:47:02
 int a[] = new int[n];
 max = a[0];
 min = a[0];

, Vous avez créé un tableau vide a. max et min sont initialisés à 0. Cela fonctionne bien pour max, mais vous donne le résultat que vous voyez pour min, car il n'y a rien de plus petit dans votre tableau créé que zéro.

Pour résoudre ce problème, ajoutez votre ligne min = a[0]; dans la boucle for, après avoir rempli votre tableau avec des valeurs, par exemple

for (int i = 0; i < n; i++) {
            a[i] = s.nextInt();
            sum += a[i];
            average = (double) sum/a.length;
            min = a[0];
            //if-statements here

Alors, min = a[0] ne sera plus zéro, mais sera la première valeur du tableau rempli.

 0
Author: vs97, 2019-07-10 18:53:36

Veuillez vous référer au code ci-dessous pour une fonctionnalité min, max, sum, average:

List<Integer> intList= Arrays.asList(70, 80, 10, 20, 40, 50);
    Integer ans=0;
    int sum1= intList.stream().reduce(ans, (x,y) -> x+y);

    System.out.println(sum1);

    int sum2= intList.stream().reduce(ans, Integer::sum);
    System.out.println(sum2);
    int max= intList.stream().max(Integer::compare).get();

    System.out.println(max);

    int min= intList.stream().min(Integer::compare).get();

    System.out.println(min);

    Double avg= intList.stream().collect(Collectors.averagingInt(x-> x));

    System.out.println(avg);
 0
Author: Pratik Pawar, 2019-08-20 07:25:38

Comme alternative, vous pouvez envisager un Ruisseau...

public static void main(String args[]) {
    Scanner s = new Scanner(System.in);
    System.out.println("Enter count elements you want to input in array: ");
    int n = s.nextInt();
    int a[] = new int[n];
    System.out.println("Enter all the elements:");
    for (int i = 0; i < n; i++) {
        a[i] = s.nextInt();
    }
    s.close();

    IntSummaryStatistics iss = Arrays.stream(a).summaryStatistics();

    System.out.println("Sum is: " + iss.getSum());
    System.out.println("Average is: " + iss.getSum()/iss.getCount());
    System.out.println("Max is: " + iss.getMax());
    System.out.println("Min is: " + iss.getMin());
}
 0
Author: Jeff Stewart, 2019-08-20 07:27:13