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 :

probleme avec des ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut probleme avec des ArrayList
    Bonjour
    je souhaite implementer une matrice d'adjacence pour representer des graphes
    pour cela j'ai decider d'utiliser des arraylist d'arraylist
    mon code compile bien cependant a l'execution eclipse m'affiche plein d'erreures:
    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
     
    import java.util.ArrayList;
     
    public class matrice_adjacent {
     
    	private  int nb_somet;
    	private ArrayList<ArrayList<Boolean>> matrice;
    	public matrice_adjacent(int nbre_som){
    		 nb_somet = nbre_som;
    		 matrice = new ArrayList<ArrayList<Boolean>>(nbre_som); 
     
    		/* for (int i=0;i<=nbre_som; i++){
    			 ArrayList<Boolean> m = new ArrayList<Boolean>(nbre_som);
    			 matrice.add(i,m);
    			 }*/
    	}
    	public void ajout_arete(int S1,int S2){
     
    		matrice.get(S1).add(S2,true);
     
    	}
    	public void suprim_arete(int S1,int S2){
    		matrice.get(S1).set(S2,false);
    	}
     
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		matrice_adjacent m = new matrice_adjacent(5);
    		m.ajout_arete(2,2);
    		m.ajout_arete(3,2);
    		m.ajout_arete(4,2);
    	}
     
    }
    et voici les erreures que j'ai a l'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    	at java.util.ArrayList.get(ArrayList.java:322)
    	at matrice_adjacent.ajout_arete(matrice_adjacent.java:18)
    	at matrice_adjacent.main(matrice_adjacent.java:40)
    si quelqu'un pouvait me dire d'ou ça vient??!!
    merci!

  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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Lors de l'appel de "m.ajout_arete(2,2);", tu appelles indirectement "matrice.get(S1).add(S2,true)".
    Et combien y-a-t-il d'éléments dans "matrice" à ce moment là ? Zéro, d'où l'exception
    Pour rappel, le nombre transmis au constructeur de l'ArrayList est uniquement la taille interne du tableau de départ. Dans la plupart des cas, on ne met pas d'argument.
    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 habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    merci pour la reponse rapide mais j'ai pas tout compris
    quand tu dis le nombre d'element dans matrice est Zero, tu veux dire que je doit d'abord inserer des ArrayList,ensuite les remplir??
    pasque j'ai essayer de faire ça, dans la partie en commentaire du constructeur, mais j'avais toujours des erreures!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
    	at java.util.ArrayList.add(ArrayList.java:367)
    	at matrice_adjacent.ajout_arete(matrice_adjacent.java:18)
    	at matrice_adjacent.main(matrice_adjacent.java:40)

  4. #4
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Une fois l'ArrayList principale créé il faut que tu créé les ArrayList quelle contient comme tu l'avais fait dans le code en commentaire. Quelles étaient les erreurs à ce moment?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    --->guigui5931: voir le post precedent.

  6. #6
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Ok j'avais pas compris. La ligne 40 sur laquelle est l'erreur correspond à quelle ligne?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    c'est dans le main: m.ajout_arete(2,2);

  8. #8
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Le truc c'est que quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    matrice = new ArrayList<ArrayList<Boolean>>(nbre_som);
    tu e créé pas une ArrayList de 5 élément mais une ArrayList de 0 élément qui a la capacité d'en recevoir 5.
    Donc quand ensuite tu fais un add(2,true) sur cette liste tu est en dehors des bornes de ta liste. Suivant ce que tu veux faire tu peux éventuellement initialisé tout les éléments au départ ou autre..

  9. #9
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Par défaut
    tu y etais presque, il faut que tu alloue les "colonnes" de ta matrice apres l'allocation des lignes
    apres
    tu dois aussi les initialiser apres l'allocation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matrice = new ArrayList<ArrayList<Boolean>>(nbre_som);
    tu enleves les commentaires avec une petite correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     for (int i=0;i<=nbre_som; i++){
    		ArrayList<Boolean> col = new ArrayList<Boolean>(nbre_som);
                    for (int j=0; j< nbre_som; j++)
    			 col.add(false); //ici j'ai initalisé a false
                    matrice.add(col);
                    }
    voila ça marche

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    merci pour ces reponses
    j'ai tester et ça marche tres bien.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Par défaut
    Deux choses :
    - Quand on utilise des Collection<Collection<T>> il faut se poser la question de savoir s'il n'est pas judicieux de créer une classe contenant la deuxieme collection (meilleur lisibilité, plus de souplesse) ;
    - Il me semble que Map correspond plus à ta problématique que List.

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

Discussions similaires

  1. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 09h53
  2. [FLASH MX] Probleme avec des liens.
    Par maxcmoi dans le forum Flash
    Réponses: 2
    Dernier message: 12/11/2005, 11h11
  3. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11
  4. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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