Comparaison de valeur dans un arraylist - Java - Programmation
Marsh Posté le 19-03-2006 à 18:44:12
1) ta question n'est pas claire.
2) si tu ne sais pas faire un truc si simple, il n'est pas encore temps de poser des questions dans un forum, retourne à ton bouquin ou à tes cours.
Marsh Posté le 19-03-2006 à 18:53:28
1/Le fait est que je n'ai pas de bouquins, ni de cours traitant ce sujet.
2/Je n'arrive pas à trouver d'information pertinentes sur internet, explique moi comment pourrais je trouver la solution en dehors de l'utilisation d'un forum?
Je cherche à comparer l'égalité de la valeur int de la position 0 de l'arraylist1 avec la valeur int de la position 0 de l'arraylist2. Il y a surement une histoire de cast à faire mais je n'arrive à rien.
Si tu ne comprends toujours pas, voilà un dessin:
Arraylist1: 0 1 2 3 4
Arraylist2: 0 3 2 5 4
Je cherche à voir si 0=0, ou 1=3, etc...
Avec des réponses comme les tiennes, j'ai de grandes chances de rester au même niveau et d'emmerder plus longtemps la communauté.
Marsh Posté le 19-03-2006 à 18:58:50
Tu t'es posé des questions sur ton code pour essayer de découvrir pourquoi il ne fonctionnait pas, déjà?
Ce serait peut-être une bonne idée non?
Marsh Posté le 19-03-2006 à 19:01:35
un forum c'est pas fait pour des cours particulier : ce n'est pas adapté.
Trouve toi des cours ou des bouquins sur internet, ca ne manque pas ! Je te promet que ce sera beaucoup plus efficace pour toi.
De plus, je n'ai toujours pas compris quel était ta question. Elle doit faire quoi ton code ? ecrire ok à chaque fois que 2 objets sont identiques ? je vois pas bien l'intérêt ... C'est quoi que tu attends de ton bout de code ?
PS : étant modérateur de ce forum, je te promet que si tu ne fait que "emmerder [...] la communauté", tu ne vas pas faire long feu ...
Marsh Posté le 19-03-2006 à 19:09:22
benou a écrit : De plus, je n'ai toujours pas compris quel était ta question. Elle doit faire quoi ton code ? ecrire ok à chaque fois que 2 objets sont identiques ? je vois pas bien l'intérêt ... C'est quoi que tu attends de ton bout de code ? |
Il veut comparer les éléments successifs de deux listes pour savoir si deux objets au même endroit dans les deux listes sont égaux.
Pour clarifier, en python ça donnerait
Code :
|
Marsh Posté le 19-03-2006 à 19:12:58
je sais ce qu'il vaut faire, mais je ne sais pas de quel façon il veut le faire : là son code fait rien d'autre que d'ecrire ok quand 2 trucs sont égaux. J'imagine que c'est pas ça son but. Sinon il est remplit (sauf le cas des null, mais on en est pas là j'ai l'impression)
Marsh Posté le 19-03-2006 à 19:15:08
Je pense que les forums sont fait justement pour traiter des cas précis, pour les cas généraux, il y a les bouquins...
De plus, le fait de juger l'utilité du code est plutot stupide. En effet, cette boucle s'incrit dans le traitement d'un programme, et donc je ne vois pas pourquoi tu juges l'intérêt de ce bout de code.
Pour ce qui est d'emmerder la communauté, c'est bien ce que tu me reproches de faire en demandant des réponses à une question "simpliste", personnellement, ce n'est pas mon but.
Enfin, si tu n'arrives toujours pas à comprendre quelle est ma question, soit je suis vraiment tres mauvais dans l'art de décrire un probleme, soit cela vient de toi...
J'ai essayé de caster l'objet retourné en int:
for(int pos = 0; pos < List1.size(); pos++)
{
Integer element = (Integer)List1.get(pos);
Integer element2 = (Integer)List2.get(pos);
if(element==element2)
{
System.out.println("N" );
}
}
Mais à l'execution, une erreur survient:
Exception in thread "main" java.lang.ClassCastException: java.lang.String
Je me donne donc le droit de demander de l'aide sur un forum.
Marsh Posté le 19-03-2006 à 19:18:25
ido- a écrit : Enfin, si tu n'arrives toujours pas à comprendre quelle est ma question, soit je suis vraiment tres mauvais dans l'art de décrire un probleme, soit cela vient de toi...
|
En clair tu fais n'importe quoi et tu te demandes pourquoi ça marche pas
Si tu lisais le message du compilateur tu réaliserais peut-être que tu tentes de caster un String en Integer, Java c'est pas PHP hein, des insanités pareilles il ne les accepte pas
Ah, et accessoirement int != Integer, mais ça tu le saurais si tu avais lu un minimum de docs genre le Java tutorial ou Thinking in Java
Marsh Posté le 19-03-2006 à 19:21:15
Les données contenues dans l'arraylist sont des int. Lorsque j'essaye de caster en int, le compilateur me renvoit "inconvertible types".
Lorsque j'essaye de caster en String, le compilateur me renvoit:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
Marsh Posté le 19-03-2006 à 19:23:43
1) tu es vraiment très mauvais dans l'art de décrire un probleme. Tu remarqueras d'ailleur qu'entre tes 2 posts ton code a changé, et que dans le 2e on dicerne enfin un problème à résoudre. Par contre on ne sait toujours pas quel est l'objectif de ton bout de code : déterminer si tes deux listes sont égales ? trouver l'index du premier objet indégale ? autre ?
2) Ton ton ne me plait pas du tout ... soit tu en changes, soit tu dégages.
3) concernant ton problème, puisqu'on le connait enfin, comme le laisse comprendre le message d'erreur, tu as une String dans ta liste et toi tu essayes de la caster en Integer. Forcément ca plante => à toi de mettre le bon type d'objet dans ta liste. (comme on ne voit pas comment tu la remplis, je ne peux pas t'en dire plus)
Ensuite la comparaison de deux Integer ca se fait avec la méthode equals() et pas avec == (qui ne fonctionne que pour les types primitifs ou les tests d'égalités de référence)
Marsh Posté le 19-03-2006 à 19:26:26
ido- a écrit : |
Si un coup ca te gueule dessus parce que c'est des String et lautre coup parce que c'est des Integer, c'est surement que tu as des objets des 2 types dans ta liste ...
Marsh Posté le 19-03-2006 à 19:29:40
ido- a écrit : Les données contenues dans l'arraylist sont des int. |
Franchement, ça te dirait pas d'apprendre le java
Non parce que là comme je le disais au dessus tu fais n'importe quoi et tu te demandes pourquoi ça marche pas.
Il y a un nom pour ça, ça s'appelle le cargo cult programming
Marsh Posté le 19-03-2006 à 19:30:16
Hélas, je n'utilise ce ton que lorsque qu'il est utilisé contre moi. Fais attention à ce que ton status de modérateur n'exacerbe pas trop ton ego
Et non, je n'ai que des int dans ma liste, c'est pourquoi je ne comprends pas l'erreur : |
Marsh Posté le 19-03-2006 à 19:34:08
ido- a écrit : Hélas, je n'utilise ce ton que lorsque qu'il est utilisé contre moi. Fais attention à ce que ton status de modérateur n'exacerbe pas trop ton ego |
Et si tu montrais le code initialisant les listes?
Marsh Posté le 19-03-2006 à 19:37:45
ido- a écrit : Hélas, je n'utilise ce ton que lorsque qu'il est utilisé contre moi. Fais attention à ce que ton status de modérateur n'exacerbe pas trop ton ego |
c'est ma patience que tu exacerbes
ido- a écrit : Et non, je n'ai que des int dans ma liste, c'est pourquoi je ne comprends pas l'erreur : | |
Evite les affirmations, ca fait très prétentieux pour un débutant.
une ArrayList ne peut contenir que des objets, pas des types primitifs => ce que tu dis est faux.
Et même en faisant abstraction de ça et en imaginant qu'elle ne contienne que des Integer, le message d'erreur que tu obtiens (ClassCast : String) prouve que tu te trompes.
Marsh Posté le 19-03-2006 à 19:50:35
C'est exact: j'ai des string issue d'une méthode ToSplit (qui ne découpe en fait que des nombres entrés au clavier) [Je viens juste de calculer que les données rentrées étaient considérées comme des string)
Mais ayant casté les données issues des deux listes en String, et les comparant avec .equals, je ne devrais pas rencontrer ce message non ?
Marsh Posté le 19-03-2006 à 19:53:24
non ce qui me fait dire que tu as des objets de 2 types différents dans ta liste. T'as qu'à tester leur type
(Tu te rends compte que ce qu'on fait là c'est de te dire point par point ce que tu pourrais trouver tout seul en faisant quelques tests ... c'est pour ça que je dis que c'est pas adapté les forums pour les tout débuts et pour des problèmes de ce type)
Marsh Posté le 19-03-2006 à 20:40:37
ido- a écrit : Mais ayant casté les données issues des deux listes en String, et les comparant avec .equals, je ne devrais pas rencontrer ce message non ? |
FAUX!
La méthode "equals" permet de vérifier si deux variables font référence au même objet. Or là, tu as deux objets String différents; même si le contenu des String est identique, ce sont deux objets distincts, donc la méthode "equals" va te renvoyer false.
Ce que tu as besoin de faire , c'est comparer le contenu de tes deux String; cela ce fait de la manière suivante:
Code :
|
Marsh Posté le 19-03-2006 à 22:11:45
post_it a écrit : La méthode "equals" permet de vérifier si deux variables font référence au même objet. |
Ta drogue a l'air super, je peux en avoir aussi?
Marsh Posté le 19-03-2006 à 22:30:25
post_it a écrit : |
bha non, ca c'est le comparator ==
Marsh Posté le 19-03-2006 à 22:38:51
Ok, voilà le topo: j'ai un arraylist avec dedans des nombres issue d'une entrée clavier donc en String, et une autre ou ce sont des nombres rentrés en int dedans. Lorsque je compare avec equals de la facon:
for(int pos=0; pos < GenList.size(); pos++)
{
Object s1 = (Object)List1.get(pos);
Object s2 = (Object)List2.get(pos);
if(s1.equals(s2))
{
System.out.println("vrai" );
}
else{
System.out.println("faux" )}
}
Cela me renvoit faux, même lorsque les deux valeurs sont les mêmes. Avec la methode de post_it, le compilateur me répond que les types sont différents.
Pourtant, en reprenant ma technique de départ avec les objects, les deux valeurs sorties sont bien des Objects, donc si je les comparent ca devrait marcher, où est le probleme?
Marsh Posté le 19-03-2006 à 22:49:02
Je crois avoir demandé la manière dont tu initialises tes listes
Marsh Posté le 19-03-2006 à 22:49:42
ido- a écrit : Cela me renvoit faux, même lorsque les deux valeurs sont les mêmes. Avec la methode de post_it, le compilateur me répond que les types sont différents. |
Les vaches et les canards ont bien 2 yeux tous deux, se sont pourtant des animaux. Mais ils ne sont pas égaux, où est le problème ?
Marsh Posté le 19-03-2006 à 22:52:01
Ok, donc cela veut dire que j'ai beau les caster cela ne sert a rien? ils ne sont pas comparables?
Marsh Posté le 19-03-2006 à 22:54:22
ReplyMarsh Posté le 19-03-2006 à 22:56:27
ido- a écrit : Ok, donc cela veut dire que j'ai beau les caster cela ne sert a rien? ils ne sont pas comparables? |
La lecture attentive de la doc te donnera tous les éléments nécessaires pour récupérer un int à partir d'un String ou inversement.
Marsh Posté le 19-03-2006 à 23:49:50
ido- a écrit : Masklinn: |
Hum, comment dire, l'initialisation ça comprenait le remplissage, parce que j'me doute bien que tu tapes un new, je m'attendais pas à ce que tu passes par un l33t Arrays.asList quoi
Marsh Posté le 20-03-2006 à 00:10:33
gm_superstar a écrit : La lecture attentive de la doc te donnera tous les éléments nécessaires pour récupérer un int à partir d'un String ou inversement. |
j'aide : ca se trouve dans la classe Integer
Marsh Posté le 20-03-2006 à 00:20:25
ido- a écrit : Ok, donc cela veut dire que j'ai beau les caster cela ne sert a rien? ils ne sont pas comparables? |
non, ca veut dire que tu compares des String et des Integer, et qu'ils ne peuvent donc pas être égaux.
Marsh Posté le 20-03-2006 à 10:50:02
masklinn a écrit : Ta drogue a l'air super, je peux en avoir aussi? |
http://java.sun.com/j2se/1.5.0/docs/api/
Citation : |
Mais bon, j'dis ça, j'dis rien!...
Marsh Posté le 20-03-2006 à 11:03:34
post_it a écrit : http://java.sun.com/j2se/1.5.0/docs/api/
|
Fail for stupid
http://java.sun.com/j2se/1.5.0/doc [...] ng.Object)
Citation : public boolean equals(Object obj) |
http://java.sun.com/j2se/1.5.0/doc [...] ng.Object)
Citation : public boolean equals(Object anObject) |
Réfléchis 30 secondes et tu devrais comprendre la raison de l'implémentation par défaut d'equals
Et accessoirement
http://java.sun.com/j2se/1.5.0/doc [...] ng.String)
Citation : public int compareTo(String anotherString) |
Oh, snap
Marsh Posté le 03-08-2006 à 02:51:13
Ouch... étant noob moi-même, ce forum fait vraiment peur...
Vous connaissez un autre forum moins élitiste avec des bénévoles qui aident vraiment les débutants ?
Je passe plus de temps à lire des cours de programmation qu'à lire des forums, mais je tombe souvent sur des cas particuliers non traités dans les bouquins ou dans les cours...
Vais tenter sur developpez.net
Marsh Posté le 06-08-2006 à 23:40:18
Bonsoir ido-,
Ci joint un exemple de code qui je pense répondra a ton probleme.
Pour terminer mon message, je me permets de dire que l'attitude de certains me font vomir.
Nottement la remarque :
Citation : PS : étant modérateur de ce forum, je te promet que si tu ne fait que "emmerder [...] la communauté", tu ne vas pas faire long feu ... |
ne serait-ce pas un abus de pouvoir? Je trouve que meme si une question sur un forum peut paraitre bête, ceci ne donne pas le droit d'insulter la personne. Insulter les gens, ca ne fait pas avancer la "communauté". Tout le monde a débuté un jour ou l'autre et je trouve que c'est dommage que certains prennent de haut les personnes débutantes. Cette attitude ne motive pas à poster des messages(comme le dit 007seb), si c'est pour après se faire insulter.
J'ai termine ma remarque et voici le code (qui peut etre critique):
Code :
|
Angelo
Marsh Posté le 07-08-2006 à 00:00:52
Je n'avais pas vu que dans ta liste tu avais des Integer et des String. Voici le code qui permet de gerer une liste de Integer et/ou String :
Code :
|
Angelo
Marsh Posté le 24-04-2019 à 23:23:12
Je suis venue chercher des réponses à un problème similaire sur ce forum et franchement, je trouve cela honteux la façon dont vous parlez à ceux qui sont débutants ou les non débutants qui ont des lacunes ou qui rencontrent tout simplement un problème basique. Vous vous croyez tout puissant avec votre statut de modérateur ou est-ce que c'est votre savoir en codage qui vous donne cette arrogance? Et vu le nombre de commentaires qui supportent cet avis (angelo77 et 007seb par exemple), c'est que je ne suis pas la seule à le penser et vous devriez allez vous cacher avec un comportement aussi abusif et irrespectueux!
Marsh Posté le 25-04-2019 à 09:10:30
Bonjour,
Est-ce vraiment pertinent de réagir 13 ans plus tard ? Quel est l'intérêt de votre message ? Un forum n'est pas un défouloir émotionnel, gardez votre frustration pour vous et tout le monde s'en portera mieux.
Marsh Posté le 19-03-2006 à 17:35:53
Bonjour je cherche à comparer les valeurs de deux arraylist entre elles; mon code ne me renvoie rien du tout... une idée?
for(int pos = 0; pos < Liste1.size(); pos++)
{
if(Liste1.get(pos).equals(Liste2.get(pos)))
{
System.out.println("OK" );
}
}