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 :

comparer et supprimer un élément de arrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    Par défaut comparer et supprimer un élément de arrayList
    Bonjour
    Je ne comprends pas pourquoi contains ne marche pas
    Merci de m'aider
    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 void trier(ArrayList<String> chaine3, ArrayList<String> chaine2){
    		ArrayList<String> chaine2b = new ArrayList<String>();
    		ArrayList<String> char_arra = new ArrayList<String>(1);
    		ArrayList<String> char_arr = new ArrayList<String>(1);
    		for(String var: chaine3){
    			chaine2b.addAll(chaine2);
    			char tab[] = var.toCharArray();
     
    			char_arra.removeAll(char_arra);
    				for(int i=0; i< tab.length; i++){
    					if(tab[i] == '1') char_arra.add(""+i+"");
    				} 
    					for(String elt : chaine2){
    						char tabe[] = elt.toCharArray();
    						char_arr.removeAll(char_arr);
    						for(int j =0; j< tabe.length; j++){
    							if (tabe[j]== '1')char_arr.add(""+j+"");
    						}
    						if (char_arra.contains(char_arr)) chaine2b.remove(elt); //??????
     
    					}
    		}
    	System.out.println("chaine2b: "+ chaine2b);
    	System.out.println("sizearra: "+ char_arra);
    	}
    console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char_arra: [2, 3, 4]
    char_arr : [2, 3]
    voici un exemple que je voudrais supprimer char_arr
    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
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		ArrayList<String> chaine3 = new ArrayList<String>();
    		ArrayList<String> chaine2 = new ArrayList<String>();
     
     
    		chaine3.add("00111");
    		chaine2.add("00011");
    		chaine2.add("00101");
    		chaine2.add("01001");
    		chaine2.add("10001");
    		chaine2.add("00110");
    		chaine2.add("01010");
    		chaine2.add("10010");
    		chaine2.add("01100");
    		chaine2.add("10100");
    		chaine2.add("11000");
     
    				System.out.println("chaine2: "+ chaine2);
    				System.out.println("chaine3: "+ chaine3);
     
    				deux_deux_trois ddt= new deux_deux_trois(); 
    				ddt.trier(chaine3, chaine2);	
     
     
     
    	}

  2. #2
    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,
    Lorsque tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (char_arra.contains(char_arr))  ....
    La condition sera toujours fausse, parce que char_arra est une liste contient des String et char_arr aussi. La méthode contains permet de vérifier si un élément appartient à une liste. C'est à dire que le paramètre doit être dans ton cas de type String. Cette méthode ne permet pas de valider l'inclusion d'une liste dans une autre, mais uniquement de vérifier la présence d'une élément dans la liste.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par nypahe Voir le message
    Je ne comprends pas pkoi contains ne marche pas
    Merci de m'aider
    Tu ferais mieux de décrire précisément ton problème plutôt que de nous balancer tout ton code, brut de fonderie...

    La méthode contains "marche" très bien c'est probablement toi qui ne sais pas t'en servir...
    Je vois par exemple que tu utilises dans ton code l'instruction char_arra.contains(char_arr) alors que char_arra et char_arr sont tous deux de type ArrayList<String>. Il est pourtant évident que char_arra, qui ne contient que des objets de type String, ne pourra pas contenir un objet de type ArrayList<String>, et donc que ce test renverra toujours false.

  4. #4
    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
    Bonsoir,

    Essayes ceci

    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
        public void trier(ArrayList<String> chaine3, ArrayList<String> chaine2) {
            ArrayList<String> chaine2b = new ArrayList<String>();
            ArrayList<String> char_arra = new ArrayList<String>(1);
            ArrayList<String> char_arr = new ArrayList<String>(1);
            for (String var : chaine3) {
                chaine2b.addAll(chaine2);
                char tab[] = var.toCharArray();
     
                char_arra.clear();
                for (int i = 0; i < tab.length; i++) {
                    if (tab[i] == '1')
                        char_arra.add(Integer.toString(i));
                }
                for (String elt : chaine2) {
                    char tabe[] = elt.toCharArray();
                    char_arr.clear();
                    for (int j = 0; j < tabe.length; j++) {
                        if (tabe[j] == '1')
                            char_arr.add(Integer.toString(j));
                    }
                    if (char_arra.containsAll(char_arr))
                        chaine2b.remove(elt);
     
                }
            }
            System.out.println("chaine2b: " + chaine2b);
            System.out.println("sizearra: " + char_arra);
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chaine2: [00011, 00101, 01001, 10001, 00110, 01010, 10010, 01100, 10100, 11000]
    chaine3: [00111]
    chaine2b: [01001, 10001, 01010, 10010, 01100, 10100, 11000]
    sizearra: [2, 3, 4]

  5. #5
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Tu ferais mieux de décrire précisément ton problème plutôt que de nous balancer tout ton code, brut de fonderie...

    La méthode contains "marche" très bien c'est probablement toi qui ne sais pas t'en servir...
    Je vois par exemple que tu utilises dans ton code l'instruction char_arra.contains(char_arr) alors que char_arra et char_arr sont tous deux de type ArrayList<String>. Il est pourtant évident que char_arra, qui ne contient que des objets de type String, ne pourra pas contenir un objet de type ArrayList<String>, et donc que ce test renverra toujours false.
    waouuuuuuuuuuh, bruit de fonderie! je croyais que l'exemple ci dessous permettrai la compréhension.
    Merci en tout cas.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par nypahe Voir le message
    waouuuuuuuuuuh, bruit de fonderie! je croyais que l'exemple ci dessous permettrai la compréhension.
    "waouuuuuuuuuuh" ça veut dire que tu me trouves méchante ? c'était pas le but...
    Le code n'est pas trop long, et apparemment d'autres l'ont lu, donc là ce n'est pas trop gênant Mais parfois le code est plus long et franchement pas clair à lire. D'ailleurs je n'ai même pas essayé de lire le tien, je suis allée directement à la ligne qui contenait "contains".
    Ton message est du style (exagéré) "mon algorithme ne marche pas, dites moi pourquoi, voici mon code". Tu aurais pu écrire "le test suivant me renvoie toujours false alors que char_arra vaut ceci et char_arr vaut cela, je m'attendais à ce que cela me renvoie true, pouvez-vous m'expliquer pourquoi ?". Ça montre que tu as réfléchi et bien isolé le problème (certes ta phrase "contains ne marche pas" le montrait également, mais moins clairement), ça évite à ceux qui te répondent de se farcir tout le code pour trouver la ligne en défaut, et en plus lorsque l'on fait l'effort de bien rédiger sa question dans 90% des cas on trouve la réponse avant de cliquer sur "envoyer" (du moins c'est ce qui m'arrive à moi ).

    Voilà, c'était juste une remarque en passant sur la forme de ta question, note que j'ai quand même répondu sur le fond du problème

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

Discussions similaires

  1. Supprimer les éléments impairs d'une ArrayList
    Par masoum dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/03/2015, 01h25
  2. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  3. Réponses: 7
    Dernier message: 16/05/2006, 15h40
  4. Supprimer un élément d'une TObjectList
    Par Lung dans le forum Langage
    Réponses: 15
    Dernier message: 30/05/2005, 17h32
  5. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14

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