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

Langage Java Discussion :

Supprimer plusieurs objet en une et une seule boucle for


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Supprimer plusieurs objet en une et une seule boucle for
    Bonjour à tout le monde;

    J'ai encore besoin d'un petit peu d'aide.

    Plusieurs fois au cours de mon apprentissage, j'ai été confronté à un problème:
    Supprimer plusieurs objets en une boucle for sans lever d'exception
    java.lang.ArrayIndexOutOfBoundsException

    Je comprends pourquoi je la lève mais je ne trouve pas d'astuce pour contourner le problème.

    Je vous met un morceau de code mais à titre purement indicatif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class EcouteurSuppression implements ActionListener {// notre ecouteur du bouton Suppression
    		@Override
    		public void actionPerformed(ActionEvent arg0) {
    			for (int i=0; i<=Bouton.getNbreBouton(); i++){
    				if (tableauBouton[i].getASupprimer() == true){
    					System.out.println("A supprimer");
    					panelCentre.remove(tableauBouton[i]);
    					panelCentre.validate();
    				}
    			}			
    		}		
    	}
    En gros ici, si la valeur booléenne d'un bouton est true, on supprime l'objet.
    Mais si on supprime un objet et bien la dernière case de notre tableau est vide, et donc erreur.
    Si je ne suis pas clair n'hésitez pas à me le dire.

    Merci beaucoup de votre aide

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class EcouteurSuppression implements ActionListener {// notre ecouteur du bouton Suppression
    		@Override
    		public void actionPerformed(ActionEvent arg0) {
    			for (int i=0; i<=Bouton.getNbreBouton() - 1; i++){
    				if (tableauBouton[i].getASupprimer() == true){
    					System.out.println("A supprimer");
    					panelCentre.remove(tableauBouton[i]);
    					panelCentre.validate();
    				}
    			}			
    		}		
    	}
    Il faut faire -1 car le tableau qui contient n element va de 0 a n -1

    edit : et cela dans l'hypothèse ou Bouton.getNbreBouton() te renvoie le nombre de bouton contenu dans tableauBouton !
    je dois dire que ton code est étrange

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    A mon avis le code devrait plutot ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    lass EcouteurSuppression implements ActionListener {// notre ecouteur du bouton Suppression
    		@Override
    		public void actionPerformed(ActionEvent arg0) {
    			for (int i=0; i<tableauBouton[i].length; i++){
    				if (tableauBouton[i].getASupprimer() == true){
    					System.out.println("A supprimer");
    					panelCentre.remove(tableauBouton[i]);
    					panelCentre.validate();
    				}
    			}			
    		}		
    	}
    difficile de dire mieux sans plus d'infos !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			for (int i=0; i<=tableauBouton.lenght -1 ; i++){
    				if (tableauBouton[i].getASupprimer() == true){
    					System.out.println("A supprimer");
    					panelCentre.remove(tableauBouton[i]);
    					panelCentre.validate();
    				}
    			}
    l'index du tableau commence 0

    ou pour eviter le -1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			for (int i=0; i<tableauBouton.lenght  ; i++){
    				if (tableauBouton[i].getASupprimer() == true){
    					System.out.println("A supprimer");
    					panelCentre.remove(tableauBouton[i]);
    					panelCentre.validate();
    				}
    			}
    après ton problème viens peut être du fait que tu supprime des élément de la même collection que celle que tu parcoure dans ce cas la ta question est mal pausé car ton code ne monte pas ça

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup de votre aide.
    Effectivement c'est bien plus propre avec tableauBouton.lenght et j'ai honte de pas l'avoir mis.

    Cependant ça me lève toujours une exception. Je comprends pas, je veux supprimer les boutons qui ont comme booléens aSupprimer à true.

    Bizarrement le code marche, enfin ca me supprime bien les boutons voulus, mais en fenêtre console j'ai une liste longue comme mon bras d'écritures rouges qui montrent bien que ça a foiré à un moment ou un autre.
    Et ces sales lignes rouges commencent par:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Fenetre$EcouteurSuppression.actionPerformed(Fenetre.java:50)

    La ligne 50 correspond à la ligne de test du booléen.

    Et en plus de ça, comme l'a si bien fait remarqué rolfone, je voulais savoir comment supprimer des élements d'une collection que je parcours.

    Un grand merci pour votre aide

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    je ne suis pas vraiment d'accord sur le fait que tu dis supprimer des éléments d'une collection que tu parcours. Sauf erreur de ma part tu n'as pas la main sur le tableau du panel qui lui aussi contient ces éléments.
    Par conséquent, tu supprimes les éléments du tableau du panel avec le remove mais dans le tiens tu as des objets null (ce qui est étrange pour moi, sauf si tu affecte null dans ton tableau à un autre moment).

    En tout cas, pour résoudre le problème il faut aussi que tu les supprimes de ton tableau.

    Concrètement je vois deux possibilités pour la suppression :
    - Mettre en place la suppression sur un tableau
    - Utiliser une liste à la place du tableau car plus simple pour la suppression (les iterator savent très bien le faire)

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/10/2014, 15h13
  2. Supprimer plusieur fois un élément dans une liste
    Par Dr_Blurp dans le forum Général Python
    Réponses: 5
    Dernier message: 15/06/2014, 17h13
  3. [PPT-2007] Utiliser du code VBA sur plusieurs objets et pas qu'un seul
    Par beegees dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 25/03/2010, 09h55
  4. Réponses: 12
    Dernier message: 09/09/2008, 14h48
  5. Réponses: 4
    Dernier message: 20/06/2007, 17h34

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