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

avec Java Discussion :

Afficher l'élément le plus fréquent dans un tableau d'entiers


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut Afficher l'élément le plus fréquent dans un tableau d'entiers
    Bonjour,

    J'ai fait ce petit script pour afficher l'entier le plus fréquent dans mon tableau mais j'affiche la fréquence d'apparition pour chaque élément de mon tableau et j'aimerai pouvoir récupérer seulement l'entier qui apparait le plus souvent.
    Je ne sais pas comment organiser mon code pour arriver à ce résultat.
    Pouvez-vous m'aider ?

    Merci beaucoup d'avance

    Code java : 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
     
    public class Exercice {
        		public static void main(String[] args) {
     
        			int[] tab1 = {5, 3, 5, 6, 7, 1, 6, 2, 1, 7, 6};
        		    int taille = tab1.length;
     
        		    /******************************************* * 
                         * Completez le programme a partir d’ici. 
                         * *******************************************/
        		    for (int i = 0; i < taille; i++) {
        	            int count = 0;
        	            for (int j = 0; j < taille; j++) {
        	                if (tab1[i] == tab1[j])
        	                  count++;
        	            }
     
        	            System.out.println("Le nombre le plus frequent dans le tableau est le :" + tab1[i] + " " + count + " fois");
        	        }
     
        				/********************************************
                                     * *Ne rien modifier apres cette ligne. 
                             * *******************************************/ 
     
     
     
        	}
     
        }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 978
    Points
    7 978
    Par défaut
    Tu pourrais utiliser des Map.

    Comme ceci par exemple :

    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
    Map<Integer, Integer> map = new HashMap<>();
    int max = 0;
    int number = -1;
     
    for (int i = 0; i < taille; i++)
    {
    	int value = 1;
    	int key = tab1[i];
     
    	if (map.containsKey(key))
    		value = map.get(key) + 1;
    	map.put(key, value);
     
    	if (value>max)
    	{
    		max=value;
    		number = key;
    	}
    }
     
    System.out.println("Le nombre le plus frequent dans le tableau est le " + number + ", " + max + " fois");
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour la réponse mais pour cet exercice je ne peux que modifier le code entre les deux parties indiquées, je ne peux pas utiliser de map.
    Il faut que j'arrive à faire l'exercice sans faire d'importation utilitaire java en début de code.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le souci dans la double boucle suivante c'est que tu comptes le nombre d'occurance de tab1[i] dans le tableau et ensuite ce compte est perdu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	    for (int i = 0; i < taille; i++) {
        	            int count = 0;
        	            for (int j = 0; j < taille; j++) {
        	                if (tab1[i] == tab1[j])
        	                  count++;
        	            }
    System.out.println("Le nombre le plus frequent dans le tableau est le :" + tab1[i] + " " + count + " fois");
        	        }
    Mais comme ce que tu dois faire c'est connaitre uniquement le plus fréquent, alors ce que tu dois déterminer c'est le count le plus grand, et donc il te suffit à chaque fois que tu as un count et un tab[i] correspondant, déterminer si c'est le plus grand que le grand déjà trouvé. S'il est plus grand, alors c'est bien le plus grand de tous ceux déjà calculé, et donc tu le stockes dans une variable (et tu stockes le tab[i] correspondant dans une autre variable).

    Je te donne un exemple pour déterminer le plus grand élément dans le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int indexmax=-1;
    int max=-1; // on initialise avec un nombre forcément plus petit que n'importe quel nombre dans le tableau
    for (int i = 0; i < taille; i++) {
       if ( tab1[i]>max ) { // si tab1[i] est plus grand que le plus grand qu'on a trouvé jusqu'à maintenant
         max=tab1[i]; // alors le plus grand c'est tab1[i]
         indexmax=i; // et on stocke son index
      }
    }
    System.out.println("Le grand des nombres dans tab1 est "+max+" et il se trouvait à la position " + indexmax);
    Ça devrait te donner une bonne piste de solution...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour ton aide Joel Drigo

    En fait, j'avais fait ce code au départ avec un appel à une valeur rentrée manuellement mais je ne dois pas passer par une valeur externe. Je ne sais pas comment récupérer la variable val autrement, je débute et c'est un peu compliqué ;-)

    Code java : 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
     
    int i,Nb_Occ;
     
     
        		    //Scanner in = new Scanner(System.in);
     
     
        				//System.out.println ("donner la valeur recherchée : ");
     
     
        				Nb_Occ=0;
        					for(i=0;i<taille;i++){
        						 int val = 0;
        							if (tab1[i] == val)
        								Nb_Occ++;;
        					}
     
     
        				System.out.println("Le nombre le plus frequent dans le tableau est le :");
        				System.out.println("" +i+" (" +Nb_Occ +" x)");

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est quoi une valeur externe ? Externe à quoi ?

    S'il s'agit d'un paramètre d'exécution du programme, qu'on passerait à la commande d'exécution, genre :


    Il faut utiliser le paramètre de la méthode main(). Il s'agit d'un tableau de String. Avec la commande précédente, le premier élément (args[0]) sera le premier paramètre. Il faut le convertir en int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int val = Integer.parseInt( args[0] );


    Par ailleurs, ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i,Nb_Occ;
    Nb_Occ=0;
        					for(i=0;i<taille;i++){
        						 int val = 0;
        							if (tab1[i] == val)
        								Nb_Occ++;;
        					}
    Il compte le nombre de 0 dans le tableau.
    Inutile de déclarer et initialiser val dans la boucle : à chaque itération, on fait la même chose, autant le faire en dehors. Et inutile de déclarer les variables ailleurs que l'endroit où on les utilise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int val=0;
     
    int Nb_Occ=0;
    for(int i=0;i<taille;i++){
        if (tab1[i] == val)
              Nb_Occ++;;
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Valeur plus fréquente dans un tableau croisé
    Par aurelie83 dans le forum Deski
    Réponses: 11
    Dernier message: 22/12/2010, 18h56
  2. Réponses: 5
    Dernier message: 18/03/2010, 00h20
  3. Valeur la plus fréquente dans un tableau
    Par sebastiencourgeon dans le forum Débuter
    Réponses: 4
    Dernier message: 02/09/2009, 12h44
  4. Réponses: 2
    Dernier message: 27/12/2005, 20h09

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