IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Afficher le maximum d'un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut Afficher le maximum d'un tableau
    Bonjour à tout le monde;
    Je suis debutant en java, j'ai developpé un petit programme pour m'afficher la plus grande valeur du tableau, le programme compile et il s'execute à la fin au lieu de m'afficher le resultat, il m'affiche un message d'erreur "java.lang.ArrayIndexOutOfBoundsException:4 at max.main<max.java 32>"

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    import java.util.Scanner;
    public class max
    {
        // instance variables - replace the example below with your own
        public static void main(String args[]){
            //initialisation des parametres
            double moy, somme=0;
            int   i,nbEl=0;     
     
            double max=0;
            Scanner sc=new Scanner(System.in);
             //L'utilisateur entre le nombre d'elève        
            System.out.println("Entrer le le nombre d'elève :");
            nbEl=sc.nextInt();
            double notes[]=new double[nbEl];
     
     
     
            for(i=0; i<nbEl; i++){ System.out.println("Entrer la note de l'elève :");
                notes[i]=sc.nextInt();
     
     
            }
     
            somme+=notes[i];
            moy=somme/nbEl;
     
            if(max>notes[i]) max=notes[i]; max++;
                            System.out.println("La plus grande note est:"+max);
        }
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Ce message dit que l'erreur se produit à la ligne 32.

    Qu'y a-t-il à ta ligne 32 ? Il n'y a rien qui te semble incorrect avec cette ligne ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut
    Merci pour votre réponse;

    Il n y a rien, après la ligne 31, le dernier accolade qui ferme la class

  4. #4
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Si je ne me trompe pas, ton i est incrémenté en fin d'exécution de la boucle. Donc quand tu sors de la boucle, i vaut nbEl, soit la taille de notes, ce qui provoque un dépassement d'index.

    En fait, tu ne devrait pas sortir de la boucle... La partie
    Devrait être dans la boucle, pas après, sinon tu as au pire une exception, au mieux la dernière note entrée.

    Pour ton max, tu devrait avoir le test dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(max<note[i])max=note[i];
    Parce que la, ton code n'est pas très cohérent... Pourquoi tu incrémente max?

    Enfin, une fois sorti de la boucle, tu calcules la moyenne et tu imprimes tes résultats.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut
    Merci beaucoup, c'est résolue pour ce programme;
    Je n'arrivais pas à comprendre pourquoi ce message d'erreur d'exception.
    J'avoue je ne maitrise pas encore la structure c'est pourquoi il n'est pas cohérent.


    Une autre question s'il vous plait:
    Je cherche à afficher la plus petite valeur du tableau, mais il m'affiche la valeur initiale du minimum qui est 0;
    le reste à savoir la plus grande,la moyenne ça marche sans probleme.
    voici le bout du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(i=0; i<nbVal; i++){ 
                                
                                System.out.println("Entre la valeur numero "+(i+1)+" : ");
                                tab[i]=sc.nextInt();
                                
                            if(max<tab[i]){max=tab[i];}
    
                            if(min>tab[i]){min=tab[i];}
    
                                somme+=tab[i];                            
                                moyenne=somme/nbVal;
                            }
    Merci d'avance.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Ce qui est normal puisque ta valeur initiale est déjà plus petite que tout ce que tu vas lire par la suite. Donc soit :
    • Tu initialises le minimum a une valeur plus grande. Mais tu prends le risque d'afficher une mauvaise valeur si tu ne lis aucune note sur la console.
    • Tu gères le cas spécial de la première lecture et quand i == 0, tu initialises le minimum a la valeur que tu viens de lire.


    Perso, je te conseilles egalement d'invoquer les méthodes mathématiques au lieu d’écrire les tests, ça rendra ton code un peu plus concis et du coup l'erreur te sera sans doute plus apparente (si le résultat du min est 0 c'est que le min de départ est tout le temps plus petit que ce qui est lu) :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i = 0; i < nbVal ; i++) { 
        [...]
        max = Math.max(max, tab[i]);
        min = Math.min(min, tab[i]);
        sum += tab[i];
    }
    moyenne = sum / nbVal;

    Juste pour info, à partir du JDK8, tu peux éviter de devoir tout coder au niveau des tests de calcul en faisant :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DoubleSummaryStatistics result = Arrays.stream(notes)
                    .summaryStatistics();
    System.out.println("Max : " + result.getMax());
    System.out.println("Min : " + result.getMin());
    System.out.println("Sum : " + result.getSum());
    System.out.println("Count : " + result.getCount());
    System.out.println("Average : " + result.getAverage());

    Évidement, ce n'est pas directement applicable ici et demande quelques aménagements puisque dans ton dernier exemple tu lis les valeurs depuis la console dans ta boucle.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problèmes d'affichage en fonction des navigateurs
    Par radical_ed dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 14/02/2009, 13h07
  2. Réponses: 1
    Dernier message: 13/01/2009, 17h24
  3. VB<2005>minimum ou maximum des valeurs
    Par matrixdine dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/09/2008, 02h42
  4. Ajouter des valeurs à un tableau
    Par Mchupakabra dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 02/04/2008, 16h03
  5. Maximum des valeurs d'une colonne
    Par cjacquel dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2007, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo