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

Java Discussion :

problème avec fusion de tableaux


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut problème avec fusion de tableaux
    bonjour à tous

    j'ai deux tableaux de chaines de caractères je veux les fusionner dans un
    tableau de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tab[0]=tab1[0];
    tab[1]=tab2[0];
    tab[2]=tab1[1];
    tab[3]=tab2[1];
    .................
    voila ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    taille3=taille2+taille1;
    tab=new String[taille3];
    for(int c=0;c<taille3;c++){
    tab[c]=tabetude[c];
    tab[c+1]=tabetab[c];
    System.out.println(tab[c]);
    }
    mais une exception est générée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    s'il vous aidez moi j'ai pas compris ou le problème: la taille du tableau est juste normalement
    taille1: taille tabetude
    taille2:taille tabetab
    j'attends votre aide
    Cordialement

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    C'est juste un problème de logique:
    imagines:
    - tabetude de taille 2
    - tabetab de taille 3
    alors taille3 = taille2+taille1 = 5;

    dans ta boucle for, tu fais aller c jusqu'à taille3 (c'est à dire 5 ici)
    le problème, c'est que tabetude ira pas plus loin que l'indice 1 et tabetab pas plus que 2. Du coup, ça pète des que la valeur de c dépasse l'un des maximum de tes tableaux. (ici c n'ira pas plus loin que 2)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut
    j'ai pas compris
    comment 5??

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Bonjour,

    Si tu as un tableau de taille 3 et un tableau de taille 2. La boucle sera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int c=0;c<5;c++){
      tab[c]=tabetude[c];
    ...
    }
    Donc lorsque c sera supérieur à 2: tabetude[c] plantera.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut
    mais le tableau n'est pas de taille 5
    moi j'ai pas compris où le problème
    j'ai mis taille3=taille des deux tableaux et c<taille3
    en plus je veux pas que c soit < à un nombre je veux que soit général
    pour s'appliquer à plusieurs tableaux

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    taille3=taille2+taille1;
    tab=new String[taille3];
    for(int c=0;c<taille3;c++){
    tab[c]=tabetude[c]; // taille3 (qui est une somme) est forcément supérieur 
    //à la taille de tabetude, donc l'accès à tabetude plantera dès que le 
    //compteur dépacera sa taille réelle.
    tab[c+1]=tabetab[c];
    System.out.println(tab[c]);
    }

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut
    il n'y a pas de solution à ce problème??

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Il y a toujours une solution, il te suffisait de prendre le temps nécessaire pour la trouver par toi-même !

    Un exemple parmi tant d'autres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      taille3=taille2+taille1;
      tab=new String[taille3];
     
      for(int c=0;c<taille3;c++){
          tab[c]= (c%2 == 0) ? tabetude[c/2] : tabetab[c/2];
          System.out.println(tab[c]);
      }
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut
    bonsoir

    merci pour votre proposition mais ça marche pas
    cordialement

  10. #10
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Je verais comme solution quelquechose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            int index_general = 0;
            int index_commun = 0;
     
            while (index_commun < taille1 && index_commun < taille2) {
                if (index_commun < taille1) {
                    tab[index_general++] = tabetude[index_commun];
                }
                if (index_commun < taille2) {
                    tab[index_general++] = tabetab[index_commun];
                }
                index_commun++;
            }

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Peut être qqch du genre :
    (ca prévoit que tes 2 tableaux puissent ne pas avoir la même taille)
    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
     
    	public static String[] alterne(String[] tab1, String[] tab2) {
    		int t1 = tab1.length;
    		int t2 = tab2.length;
    		int min = Math.min(t1, t2);
     
    		int tfinal = t1 + t2;
     
    		String[] tabFinal = new String[tfinal];
    		int positionInFinal = 0;
    		// ici on copie les 2 tableaux en alternance
    		for (int i = 0; i < min; i++) {
    			tabFinal[positionInFinal++] = tab1[i];
    			tabFinal[positionInFinal++] = tab2[i];
    		}
     
    		// puis on ajoute le restant
    		for (int i = min; i < t1; i++) {
    			tabFinal[positionInFinal++] = tab1[i];
    		}
    		for (int i = min; i < t2; i++) {
    			tabFinal[positionInFinal++] = tab2[i];
    		}
    		return tabFinal;
    	}

  12. #12
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 52
    Points
    52
    Par défaut
    bonjour
    merci à tous et merci beaucoup uther pour votre proposition
    enfin le problème est réglé. Merci infiniment

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

Discussions similaires

  1. Problème avec Sérialisation des tableaux de Axis 1.4
    Par khoufouq dans le forum Services Web
    Réponses: 1
    Dernier message: 26/07/2012, 09h29
  2. Réponses: 11
    Dernier message: 25/07/2011, 13h34
  3. [XL-2007] Problème avec les variables tableaux
    Par MouM38 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/09/2010, 23h16
  4. Problème avec fusion de dimension
    Par clgri dans le forum Webi
    Réponses: 3
    Dernier message: 02/04/2010, 09h00
  5. Problème avec imbrication de tableaux
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 11/07/2006, 21h59

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