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 :

[tableau Java] + débutant + fréquence entier


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut [tableau Java] + débutant + fréquence entier
    Je dois faire ceci pour un cours:

    Écrire un programme qui permet de saisir un tableau de n entiers strictement supérieurs à 0 et de renvoyer les deux entiers les plus fréquents.

    À date, je me suis dit que si je mettais les entiers en ordre croissant, cela m'aiderait lors de ma vérification. Mais justement, je ne comprends pas comment trouver les 2 entiers les plus fréquents.

    Merci de votre précieuse aide.

    Voici mon code à date:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    import javax.swing.JOptionPane;
     
     
    public class Exercice4 {
     
     
     
    	public static void main (String[]args){
     
    		int nbrEntiers = 0, 
    		i = 0, transition;
    		boolean permutation;
     
     
    		nbrEntiers = Integer.parseInt(JOptionPane.showInputDialog("Veuillez saisir le nombre d'entiers que vous souhaitez entrer. "));
     
     
    		while(nbrEntiers < 0) 
    		{
     
    		System.out.println("Entrée eronnée. Veuillez recommencer");
    		nbrEntiers = Integer.parseInt(JOptionPane.showInputDialog("Veuillez saisir le nombre d'entiers que vous souhaitez entrer. "));
     
     
    		}
     
    		int[] tab = new int [nbrEntiers];
     
    		for (i=0; i<(nbrEntiers); i++)
    	      {
    	      tab[i]=Integer.parseInt(JOptionPane.showInputDialog("Entrez la valeur" +(i+1) + " du tableau: "));
    	      }  	
     
    	      do
    	      {
     
    	    	 //hypothèse : le tableau est trié
    	         permutation=false;	
     
     
     
    	          for (i=0; i<(nbrEntiers-1); i++)
    	      {
     
    	        	  if(tab[i]>tab[i+1])
    	                   {
    	                   //s'ils ne le sont pas on échange leurs positions
    	                  transition=tab[i];
    	                   tab[i]=tab[i+1];
    	                   tab[i+1]=transition;
     
     
    	                   permutation=true;
     
    	                   }
    	      		}
     
    	      }
    	      while(permutation);
     
          }
     
     
    	}

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 959
    Par défaut
    Il y a plusieurs façons de s'y prendre. Ca ressemble à un exercice, qu'êtes vous censé utiliser pour le résoudre?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Bien oui c'est un exercice mais le problème c'est qu'il ne me demande pas d'utiliser quelque chose en particulier.

    Je ne sais donc pas comment chercher.

    Nous avons simplement vu les trucs de base: if/else, switch, while, etc.

    Nous avons vu aussi comment appeler une méthode

    Et comment créer un tableau.

    J'ai fait d'autres programmes tableau mais celui-là je ne comprends pas

    Je pense que je devrais commencer ainsi:

    for (i=0; i<nbrEntiers; i++)

    if (tab[i]==tab[i+1])
    ???????

    Mais la je ne sais pas, je devrais peut-être incrémenter une variable (ex. fréquence) mais comment aller rechercher ensuite les 2 plus grandes fréquences et ensuite savoir c'est la fréquence de quelle nombre?

    Bref, je suis un peu perdue...Merci de m'aider!

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    y a vraiment plein de façon de le faire, même en utilisant que des tableaux...

    méthode bourrin :

    tu cherches le plus grand entier saisi
    tu crées un nouveau tableau de la taille du plus grand entier+1
    tu parcours ton tableau saisi et tu incrémente dans l'autre tableau la valeur correspondante :
    pour tout i :
    tab_créé[tab_saisi[i]]++;

    tu n'as plus qu'à chercher dans tab_créé les 2 plus grosses valeurs


    ça marche mais c'est vraiment pas optimisé, à toi de faire mieux, en passant par un tableau intermédiaire par exemple...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Une autre possibilité est de partir de là (sachant que tous tes entiers sont > 0):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int cptCourant=0;
    int cpt1=0;
    int cpt2=0;
    int nbCourant = -1;
    int nb1 = -1;
    int nb2 = -1;
    Et tu renseignes par exemple dans cpt1/nb1 le nombre qui a la plus grande fréquence et dans cpt2/nb2 le deuxième.

    cptCourant et nbCourant te servent à avoir l'information sur la fréquence courante et le nombre courant.

    Et tu es en bonne voie avec le principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (i<tab.length-1 && tab[i] == tab[i+1])
        cptCourant++;

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    J'ai fait ceci pour la résolution de ce problème et cela ne fonctionne pas. Pouvez-vous m'aider à le corriger?

    import javax.swing.*;

    public class Exercice4
    {

    int i, nbrEntiers,entier1, entier2,nombre, cpt,
    nombre1, nombre2;
    int max1, max2;



    public Exercice4()
    {

    nbrEntiers = Integer.parseInt(JOptionPane.showInputDialog("Veuillez saisir le nombre d'entiers que vous souhaitez entrer. "));


    while(nbrEntiers < 0)
    {

    System.out.println("Entrée eronnée. Veuillez recommencer");
    nbrEntiers = Integer.parseInt(JOptionPane.showInputDialog("Veuillez saisir le nombre d'entiers que vous souhaitez entrer. "));

    }

    int[] tab = new int [nbrEntiers];

    for (i = 0; i<nbrEntiers; i++){
    tab[i] = Integer.parseInt(JOptionPane.showInputDialog("Entrez la valeur" + (i+1) +" de votre tableau:"));



    }
    for (i=0; i<nbrEntiers; i++){

    nombre= i;

    for(i=0; i<nbrEntiers; i++)
    {
    if(tab[i]==nombre){
    cpt++;

    }

    }

    for( i = 1; i<nbrEntiers; i++)
    {
    if(i == 1)
    {
    max1 = tab[i];
    nombre1 = tab[i-1];

    }
    else
    {
    if(tab[i] > max1)
    {
    max2 = max1;
    nombre2 = nombre1;
    max1 = tab[i];
    nombre1 = tab[i-1];
    }
    else
    {
    max2 = tab[i];
    nombre2 = tab[i-1];
    }
    }
    }


    }

    System.out.println("Le nombre le plus fréquent dans le tableau est : " + nombre1 + " avec un fréquence de : " + max1 );
    System.out.println("Le nombre le plus fréquent dans le tableau est : " + nombre2 + " avec un fréquence de : " + max2 );


    }

    public static void main(String[] args)
    {
    new Exercice4();

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Indice 1 :

    Tu n'as besoin que d'une seule boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0; i<tab.length; i++)
    {
        // ...
    }
    Indice 2 :

    Tu étais bien partie avant avec le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (tab[i] == tab[i+1])
    {
        cpt++;
    }
    else
    {
        // c'est là que ça se passe
    }
    Tu t'es compliquée la vie...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Je comprends que mon problème est à cet endroit et je voudrais le corriger, mais je ne comprends pas comment.
    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
     
     
    for(i=0; i<nbrEntiers-1; i++)
    			{
    				if(tab[i]==tab[i+1]){
    					cpt++;
    				}
     
     
    			if(i == 0)
    			{
    				max1 = cpt;
    				nombre1 = tab[i];
     
    			}
    			else
    			{
    				if(tab[i] > max1)
    				{
    					max2 = max1;
    					nombre2 = nombre1;
    					max1 = tab[i];
    					nombre1 = tab[i];
    				}
    				else
    				{
    					max2 = tab[i];
    					nombre2 = tab[i-1];
    				}
    			}
    		}

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Bref, comment me simplifier la vie?

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Ouais mais après c'est trop facile et ce n'est pas t'aider puisque ce n'est qu'en se creusant la tête que l'on apprend...

    Bon voilà la structure principale (sachant qu'il y a des erreurs et des choses à ajouter), je n'en dirais pas plus !

    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
    for (int i=0; i<tab.length; i++)
    {
        if (tab[i] == tab[i+1])
        { 
            cpt++;
        }
        else
        {
            if (cpt > max1 && cpt > max2)
            {
                // blblabla
            }
            else if (/*...*/)
            {
                // blblabla
            }
        }
    }

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Je sais que cela est simple, mais je n'ai que 15 heures de cours de programmation environ à mon actif donc..

    mais merci pour tout!

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

Discussions similaires

  1. d'un tableau de caracteres à un entier....
    Par felicity dans le forum C
    Réponses: 5
    Dernier message: 03/01/2006, 16h32
  2. Réponses: 2
    Dernier message: 21/12/2005, 17h33
  3. tableau de couple d'entiers
    Par doublelune dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/10/2005, 06h34
  4. classes java [débutant]
    Par glurps dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/06/2003, 15h57

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