Extraire le contenu d'un tableau

Résolu
Messages postés
39
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
11 mai 2008
-
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
-
Bonjour,





J’aurais
besoin d’un coup de main à mon problème :





J’ai un
tableau unidimensionnel qui contient trois valeurs redondantes, et j’aimerais
bien extraire chaque valeurs et le mettre dans un autre tableau,je m’explique :





String
tableau [] = {" nom ", "prenom ", "adresse " ,    // mon tableau principale






                                "nom1", " prenom1 ", "adresse1 " ;






                                 "nom2 ", " prenom2 ", "adresse2 " ;…..






                          .......... " nomN ", " prenomN ", " adresseN " }






 






Mainteneant,
j’aimerais extraire les infotmations de ce tableau et les mettre dans  trois autre tableaux : tab1, tab2 et tab3 tel que :





tab1 contient que les noms, tab2 contient que les prénoms et tab3 contient que les adresses.



Une idée? Merci d'avance.
A voir également:

9 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Il a fait une erreur d'étourderie je pense,

remplace le i/3 + 1 par i/3
remplace le i/3 + 2 par i/3

ou sinon, choisis ma solution ;), elle est meilleure lol
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Bon excuse moi si je t'ai paru prétentieux mais je t'assure que les tableaux ce n'est pas la mère à boire.

Et ça fonctionne très bien avec ma correction.

Evidemment quand je te disais :

"remplace par

noms[i] = tableau[3 * i];

pour les trois lignes ;) "

il fallait mettre :

noms[i] = tableau[3 * i];
prenoms[i] = tableau[3 * i + 1];
adresses[i] = tableau[3 * i + 2];

ça me semblait évident.

Maintenant c'est vrai que je préfère les collections aussi.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut:

String[] tableau = {...};

String[] firstNames = new String[tableau.length/3];
String[] lastNames = new String[tableau.length/3];
String[] addresses = new String[tableau.length/3];

for (int i = 0; i < tableau.length; ++i) {
    if ((i%3) == 0) {
       firstNames[i/3] = tableau[i];
    } else if ((i%3) == 1) {
       lastNames[i/3 + 1] = tableau[i];
    } else {
       addresses [i/3 + 2] = tableau[i];
    }
}
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
On voit que tu débute car ça n'est pas vraiment un gros problème, je vais te proposer une solution sauf que je remplace
tes "tab1", "tab2" et "tab3" par des identifiants plus explicites, habitue-toi à faire ça. Ca rendra ton code plus lisible.



Possibilité :

int nbPersonnes = tableau.length / 3;

String[] noms = new String[nbPersonnes];
String[] prenoms = new String[nbPersonnes];
String[] adresses = new String[nbPersonnes];

for(int i = 0 ; i < nbPersonnes ; i++){
    noms[i] = tableau[3 * nbPersonnes];
    prenoms[i] = tableau[3 * nbPersonnes + 1];
    adresses[i] = tableau[3 * nbPersonnes + 2];
}

Cependant, n'oublie pas non plus que Java est un langage à objets. Donc je ne sais pas ce que tu veux faire avec ces personnes, mais je te suggère de créer une class Personne :

Avec les objets :

public class Personne {

  
    // attributs de ta classes (proprietes si tu veux)
   
    private String nom;
    private String prenom;
    private String adresse;

    // constructeur (methode particuliere qui permet de creer une instance
    // (exemplaire) de ta classe
   
    public Personne(String nom, String prenom, String adresse) {
       this.nom = nom;
       this.prenom = prenom;
       this.adresse = adresse;
    }

    // setters (methodes permettant de modifier les attributs de l'objet (instance))

    public void setNom(String nom) {
       this.nom = nom;
    }

    public void setPrenom(String prenom) {

       this.prenom = prenom;

    }

    public void setAdresse(String adresse) {

       this.adresse = adresse;

    }

    // getters (methodes permettant de lire les proprietes de l'objet)

    public String getNom() {
       return nom;
    }

    public String getPrenom() {
        return prenom;  
    }

    public String getAdresse() {
       return adresse;
    }

    // methode permettant de renvoyer une representation textuelle de ton instance
    // souvent pratique

    public String toString() {
       return "Je suis " + prenom + " " + nom + " et j'habite " + adresse;
    }

}

Voilà et du coup, le bout de code du dessus devient :

int nbPersonnes = tableau.length / 3;

Personne[] personnes = new Personne[nbPersonnes];


for(int i = 0 ; i < nbPersonnes ; i++) {
    personnes[i] = new Personne(
            tableau[3 * i + 0],
            tableau[3 * i + 1],
            tableau[3 * i + 2]);
}

Si tu as des questions, n'hésites pas.
  
Messages postés
39
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
11 mai 2008

Salut,
Merci pour la rapidité de ta réponse "Ombitious_developper", j'ai essaayé ta méthode avec une petite classe main comme ceçi:

package tests;

public class TestTableau {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] tableau = {"nom", "prenom", "adresse",
                "nom1", "prenom1", "adresse1",
                "nom2", "prenom2", "adresse2"};

        String[] firstNames = new String[tableau.length/3];
        String[] lastNames = new String[tableau.length/3];
        String[] addresses = new String[tableau.length/3];

        for (int i = 0; i < tableau.length; ++i) {
            if ((i%3) == 0) {
               firstNames[i/3] = tableau[i];
            } else if ((i%3) == 1) {
               lastNames[i/3 + 1] = tableau[i];
            } else {
               addresses [i/3 + 2] = tableau[i];
            }
        }
        System.out.println(firstNames[0]);
        System.out.println(firstNames[1]);
        System.out.println(firstNames[2]);
        System.out.println(lastNames[0]);
        System.out.println(lastNames[1]);
        System.out.println(lastNames[2]);
        System.out.println(addresses[0]);
        System.out.println(addresses[1]);
        System.out.println(addresses[2]);

    }

}
et j'ai l'erreur suivante:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at tests.TestTableau.main(TestTableau.java:24)
La ligne 24 : addresses [i/3 + 2] = tableau[i]; (je crois que ca donne toujours  i >= 2, donc hors du tableau. )
Messages postés
39
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
11 mai 2008

Salut,
Merci jojolemariole pour ta réponse, j'avoue qu je ne suis pas un expert en java ni un débutant non plus, juste je ne suis pas à l'aise avec les tableaux, j'essaye toujours de trouver une solution avec les collections, les noms,les prenom que j'ai mis c'est juste au titre d'exemple , mais merci comme meme pour la class Personne.
Messages postés
39
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
11 mai 2008

Resalut jojolemariole,
ta methode ne marche pas :
int nbPersonnes = tableau.length / 3;
A cette ligne : noms[i] = tableau[3 * nbPersonnes]; (n'oubli pas q'un tableau commençe à 0 !!!!)
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
oups

moi aussi j'ai fait une erreur d'étourderie

remplace par

noms[i] = tableau[3 * i];

pour les trois lignes ;)

et oui je sais qu'un tableau commence à l'index 0. lol.
Messages postés
39
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
11 mai 2008

Désolé, mais ça marche pas non plus, ca retourne que le premier élément (nom, nom1,nom2),ca prouve que les tableau c'est pas facile parfois, je préfere la solution de "Ombitious_developper" qui est plus facile, Merci comme meme.