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 :

Tableau statique : Créer une methode addition() et nombres impairs()


Sujet :

avec Java

  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut Tableau statique : Créer une methode addition() et nombres impairs()
    Bonsoir,

    Je suis débutant en Java, j'aimerais apprendre à mieux manipuler un tableau statique avec différentes méthodes. Le but de mon exercice est de faire 3 choses :

    • 1 ) Calculer le total de tous les nombres du tableau :
    • 2 ) Trouver les nombres impairs :
    • 3 ) Calculer le total des nombres impairs :


    Voici le tableau en question :

    int[] tab = {1,3,4,2};


    J'ai pas eu de problème pour la création de ma méthode addition()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static int addition(int[] tab){
          int somme = 0; 
          for(int i=0; i<tab.length;i++){
            somme += tab[i];
          }
          return somme;
        }
    Par contre, pour la création de ma function nbrImpairs() je n'y arrive pas du tout...

    J'ai déjà ceci, mais il y a des parties du code qui sont manquantes.... Je vois pas trop comment faire ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static int nbrsImpairs(int[] tab){
          for(int i=0;i<tab.length;i++){
            if(tab[i] %2 != 0){
              ????
              System.out.print(tab[i] + " ");
            }
          }
          return ???
     }

    Je vous remercie pour votre aide.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Pour savoir si un nombre entier est pair, tu peux tester le reste de la division entière par 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( tab[i] % 2 == 0) { System.out.println("pair !!"); }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir dinobogan,

    Je n'arrive pas à reproduire cela dans une méthode liée à un tableau statique.

  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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static int nbrsImpairs(int[] tab){
          for(int i=0;i<tab.length;i++){
            if(tab[i] %2 != 0){
              ????
              System.out.print(tab[i] + " ");
            }
          }
          return ???
     }
    Je suppose que ta méthode doit retourner les nombres impaires qui sont dans tab. Donc, plusieurs nombres potentiellement, donc tu ne peux pas retourner juste un int. Si tu devais compter les nombres impaires, oui.

    Donc il te faut retourner un tableau. Le souci c'est que si tu retournes un tableau, tu ne pourras pas savoir combien il y a de numéros impaires dedans, sans faire une copie du tableau (comme je t'ai expliqué dans une précédente discussion)

    Mais peut-être que tu n'as pas encore le droit d'utiliser ces solutions de copie de tableau pour résoudre tes exercices.

    Dans cette précédente discussion, tu avais fait une méthode qui permettait de récupérer les noms de moins de 6 lettres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i=0; i<tabNom.length;i++){
          if(tabNom[i].length() < 6){
            tab1[y++] = tabNom[i];
          }
     
        }
    Et bien récupérer les nombres impaires c'est exactement le même procédé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i=0; i<tab.length;i++){
          if(tab[i] % 2 == 1 ){ // impaire
            tab1[y++] = tab[i];
          }
     
        }
    si tu fais une méthode qui prend 2 tableaux en paramètre et qui retourne le nombre d'éléments impaires trouvés (donc y dans le code ci-dessus), tu peux le faire dans une méthode par ce procédé. Il suffira pour appeler la méthode de passer les 2 tableaux en paramètres.

    Une autre solution, serait de ne passer qu'un seul tableau qui est lui une copie du tableau de départ. Comme on est sûr qu'il n'y a pas plus de numéro impaires que de numéro au total dans le tableau, on peut écraser le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int nbrsImpairs(int[] tab) {
    int n=0;
    for(int i=0; i<tab.length;i++){
          if(tab[i] % 2 == 1 ){ // impaire
            tab[n++] = tab[i];
          }
     
        }
    return n;
    }
    et pour l'appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int[] tabimpairs = new int[tab.length];
    // copie du tableau
    for(int i=0; i<tab.length; i++) {
       tabimpairs[i]=tab[i];
    }
    int n = nbrsImpairs(tabimpairs); // recherche des nombres impairs
    // affichage du résultat
    for(int i=0; i<n; i++) {
       System.out.println(tabimpairs[i]);
    }
    Tu as même peut-être écrit une méthode qui fait la copie de tableau sans avoir à la réécrire ici.
    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
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    Merci beaucoup pour vos explications. En fait j'avais déjà utiliser cette manip:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int nbrsImpairs(int[] tab) {
    int n=0;
    for(int i=0; i<tab.length;i++){
          if(tab[i] % 2 == 1 ){ // impaire
            tab[n++] = tab[i];
          }
     
        }
    return n;
    }
    Le soucis c'est que dans mon int[] tab = {1,3,4,2}; je veux afficher les deux nombres impairs:

    donc je dois avoir dans mon print 1 & 3

    Et après avec ma méthode addition() j'aimerai additionner mes deux nombres impairs et avoir comme réponse 4. En gros, je devrais utiliser ma méthode addition() avec nbrsImpairs().

    Je suis vraiment bloqué dans ma méthode nbrsImpairs parce que je n'arrive pas à récupérer mes deux nombres impairs.

  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
    Si tu veux pouvoir chaîner des appels de méthodes sur tes tableaux, il va falloir passer systématiquement le nombre d'éléments dans le tableau, qui ne sera définitivement plus forcément sa taille (tab.length)

    Par exemple, si tu fais :

    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
     
     
    public static int addition(int[] tab, int length){
          int somme = 0; 
          for(int i=0; i<length;i++){
            somme += tab[i];
          }
          return somme;
    }
     
    public static int nbrsImpairs(int[] tab, int length) {
        int n=0;
        for(int i=0; i<length;i++){
            if(tab[i] % 2 == 1 ){ // impaire
                tab[n++] = tab[i];
            }
        }
        return n;
    }
    Tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void main(String[] arg) {
     
       int[] tab = {1,3,4,2};
     
       int length = tab.length;
     
       length = nbrsImpairs(tab, length);
     
       int somme = addition(tab, length);
     
       System.out.println("Somme des nombres impairs : " + somme);
     
    }
    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.

  7. #7
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Merci beaucoup pour ton aide, c'est vraiment ça que je voulais faire. Je vais lire tout ça à la maison pour pouvoir le reproduire seul.

    Merci encore pour tes explications.

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

Discussions similaires

  1. Tableau : Comment créer une ligne en gras ?
    Par jbollagnier dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 25/04/2007, 13h56
  2. Réponses: 1
    Dernier message: 15/05/2006, 18h43
  3. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  4. Réponses: 7
    Dernier message: 21/12/2005, 16h44
  5. Réponses: 6
    Dernier message: 10/08/2005, 11h36

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