Extraire le contenu d'un tableau

Résolu
bensFouad Messages postés 39 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 11 mai 2008 - 24 avril 2008 à 22:09
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 24 avril 2008 à 23:34
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.

9 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 22:39
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
3
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 23:34
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.
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2008 à 22:15
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];
    }
}
1
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 22:31
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.
  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bensFouad Messages postés 39 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 11 mai 2008
24 avril 2008 à 22:35
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. )
0
bensFouad Messages postés 39 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 11 mai 2008
24 avril 2008 à 22:50
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.
0
bensFouad Messages postés 39 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 11 mai 2008
24 avril 2008 à 23:04
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 !!!!)
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 23:09
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.
0
bensFouad Messages postés 39 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 11 mai 2008
24 avril 2008 à 23:21
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.
0
Rejoignez-nous