Liste de booléens

Résolu/Fermé
Foreverson Messages postés 231 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 22 juin 2014 - 19 déc. 2008 à 15:33
Foreverson Messages postés 231 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 22 juin 2014 - 19 déc. 2008 à 18:11
Bonjour,
je travaille avec Processing, très proche de Java, mais pas suffisamment dans mon cas ^^

Je dois travailler avec du "manual-boxing" et du"manual-unboxing" en ce qui concerne les listes.

J'ai créé une liste de booléens, appelée versDroite. J'aimerais pouvoir changer la valeur du booléen à l'indice 0 (qui a été initialisé auparavant) mais je n'y arrive pas...

Voilà comment je procède :

( (Boolean)versDroite.get(0) ).booleanValue() = true;

Voici le message d'erreur : The left-hand side of an assignment must be a variable.

D'habitude, je fais du "manual-unboxing" avec des classes que je crée, donc avec accès aux champs facilement (.x ou .y par exemple). Là, j'ai beau appeler la "valeur booléenne" de l'élément 0 de ma liste, ça ne fonctionne pas...

Merci de m'aider

4 réponses

Foreverson Messages postés 231 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 22 juin 2014 27
19 déc. 2008 à 16:13
Je suis sûr que c'est pas bien compliqué, aidez-moi s'il vous plait
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
19 déc. 2008 à 16:37
Bonjour,
Tu essaies de modifier un attribut de l'objet stocké à l'emplacement 0 de ta liste. Tu n'as pas le droit de faire ça (l'attribut est sans aucun doute private).
De plus, comme on n'a pas de setter sur le boolean dans la classe Boolean, on ne peut pas le modifier directement, il faut créer une nouvelle instance et l'insérer dans ta liste à la place de l'ancienne :
 
Boolean bool = new Boolean(true);
versDroite.remove(0);
versDroite.add(0, bool);

Bon, je ne connais pas Processing, ici j'écris en Java (en supposant que ta liste soit une instance d'une implémentation de l'interface List).

Cordialement,
0
Foreverson Messages postés 231 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 22 juin 2014 27
19 déc. 2008 à 17:02
Merci, ça marche bien ton truc !
Tu m'as appris une nouvelle commande, je ne savais pas qu'on pouvait ajouter un élément n'importe où dans la liste. ça m'arrange bien car ma dernière solution aurait été de faire une nouvelle liste temporaire puis de supprimer l'autre, bref, un truc horrible...

Merci bien !
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
19 déc. 2008 à 17:20
En java l'interface List possède cette méthode. Ensuite, en fonction de l'implémentation, l'insertion d'un élément à l'index spécifié sera plus ou moins long (par exemple pour une ArrayList, ça se fera en O(1), pour une LinkedList en O(n)), donc il faut tout de même en tenir compte avant d'employer cette méthode à tout va.

Ta solution serait effectivement celle à employer si tes listes étaient codées avec une implémentation d'une pile (on ne peut retirer que les derniers éléments qu'on stocke dans une autre pile, on supprime l'élément souhaité et on remet les éléments stockés temporairement dans la pile d'origine). Note que si ta pile est codée comme une implémentation de liste, c'est l'algorithme qui est utilisé quand tu fais :
versDroite.remove(0);
versDroite.add(0, bool);

Sauf que ton "truc horrible" est exécuté 2 fois : une fois pour supprimer le premier élément, une fois pour ajouter un élément en première position.

La moralité : les types abstraits (ici List) c'est bien, mais il faut toujours penser à l'implémentation optimale.

A la prochaine !
0
Foreverson Messages postés 231 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 22 juin 2014 27
19 déc. 2008 à 18:11
Je ne comprends pas tout à ce que tu racontes, mais c'est pas grave ^^

J'ai commencé la programmation en septembre, essentiellement sur Processing, je suis encore un novice.
En tout cas, plus tard, si j'ai besoin, je saurai à qui m'adresser.

Merci, a+
0