Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2685 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Excusez moi je jouer au boulet mais je capte pas une erreur java ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Excusez moi je jouer au boulet mais je capte pas une erreur java ...

n°298941
EpoK
Let's burn
Posté le 01-02-2003 à 17:24:16  profilanswer
 

Exception in thread "main" java.lang.ClassCastException
 
je compren ke c un de mes cast ki merde mais cette erreur survient quand on essai de faire koi de mal ?
 
merci

mood
Publicité
Posté le 01-02-2003 à 17:24:16  profilanswer
 

n°298944
EpoK
Let's burn
Posté le 01-02-2003 à 17:28:29  profilanswer
 

Code :
  1. while(st.hasMoreElements())
  2.  {
  3.   EstDedan = false;
  4.   mot = (String)st.nextElement();
  5.   for(i=0;i<lex.size();i++)
  6.   {
  7.    EstDedan = (mot.equals(lex.get(i)));
  8.   }
  9.   if(!EstDedan)
  10.   {
  11.    sb = new StringBuffer(mot);
  12.    lex.add(sb);
  13.   }
  14.  }


 
le truc c a partir dun stringtokenziker créé en vector avec dedan les mot mais pas ajouté le redondan mon blem c ke :
EstDedan = (mot.equals(lex.get(i)));
revoi tjrs false et je c pas pk  :sweat:

n°298945
lorill
Posté le 01-02-2003 à 17:30:51  profilanswer
 

ca réponds pas a la question, mais en passant :
t'as pas besoin de caster en string pour utiliser .equals(), c'est une methode d'object

n°298946
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:31:14  profilanswer
 

a causede ta boucle: quand tu as trouve, faut sortir de la boucle, sinon estdedans quiv aut vrai risque d'etre mis a faux lors de la prochaine itération. donc rajoute un autre test dans la condition de ton for

n°298948
Cherrytree
cn=?
Posté le 01-02-2003 à 17:31:50  profilanswer
 

Tu compares des String à des StringBuffer, pourquoi donc ? [:zebra33]
 
C'est Taz qui a la solution, en revanche, je ne comprends toujours pas pourquoi tu ajoutes des StringBuffer dans ton Vector et pas des String toutes bêtes.


Message édité par Cherrytree le 01-02-2003 à 17:33:22

---------------
Le site de ma maman
n°298950
Cherrytree
cn=?
Posté le 01-02-2003 à 17:32:29  profilanswer
 

++Taz a écrit :

a causede ta boucle: quand tu as trouve, faut sortir de la boucle, sinon estdedans quiv aut vrai risque d'etre mis a faux lors de la prochaine itération. donc rajoute un autre test dans la condition de ton for


Bien vu !


---------------
Le site de ma maman
n°298951
EpoK
Let's burn
Posté le 01-02-2003 à 17:33:29  profilanswer
 

Cherrytree a écrit :

Tu compares des String à des StringBuffer, pourquoi donc ? [:zebra33]  


 
ué jvien dle voir
now ca pass :
 

Code :
  1. public static void ajouter(Vector lex, StringTokenizer st)
  2. {
  3.  int i;
  4.  String mot;
  5.  StringBuffer sb;
  6.  boolean EstDedan;
  7.  String m;
  8.  while(st.hasMoreElements())
  9.  {
  10.   EstDedan = false;
  11.   mot = (String)st.nextElement();
  12.   for(i=0;i<lex.size();i++)
  13.   {
  14.    m = (lex.get(i)).toString();
  15.    EstDedan = (mot.equals(m));
  16.   }
  17.   if(!EstDedan)
  18.   {
  19.    sb = new StringBuffer(mot);
  20.    lex.add(sb);
  21.   }
  22.  }
  23. }


 
prochaine étape les trié en ordre alphabétik :D

n°298952
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:34:54  profilanswer
 

+1 pourquoi des StringBuffer?

n°298953
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:35:36  profilanswer
 

c toujours pas bon....

n°298954
EpoK
Let's burn
Posté le 01-02-2003 à 17:37:11  profilanswer
 

++Taz a écrit :

a causede ta boucle: quand tu as trouve, faut sortir de la boucle, sinon estdedans quiv aut vrai risque d'etre mis a faux lors de la prochaine itération. donc rajoute un autre test dans la condition de ton for


 
rololo sui a la mass :(
 

Code :
  1. public static void ajouter(Vector lex, StringTokenizer st)
  2. {
  3.  int i;
  4.  String mot;
  5.  StringBuffer sb;
  6.  boolean EstDedan;
  7.  String m;
  8.  while(st.hasMoreElements())
  9.  {
  10.   EstDedan = false;
  11.   mot = (String)st.nextElement();
  12.   i=0;
  13.   while((i<lex.size()) && (!EstDedan))
  14.   {
  15.    m = (lex.get(i)).toString();
  16.    EstDedan = (mot.equals(m));
  17.    i++;
  18.   }
  19.   if(!EstDedan)
  20.   {
  21.    sb = new StringBuffer(mot);
  22.    lex.add(sb);
  23.   }
  24.  }
  25. }


 
thx

mood
Publicité
Posté le 01-02-2003 à 17:37:11  profilanswer
 

n°298956
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 01-02-2003 à 17:37:50  profilanswer
 

Deux choses :
* ici, c'est pas un SMS ou un chat, tu peux écrire autant de lettres que tu veux, c'est la fête ! Donc si tu pouvais éviter "d'écrir kom ça", ça serait bien pour tout le monde, merci :jap:  
* Java c'est bien mais à ta place et pour plus de lisibilité, je déclarerais mes variables du genre : StringBuffer sb = new StringBuffer();
En gros, mets le type de ta variable devant son nom comme ça on sait en un coup d'oeil à quoi ça correspond (d'ailleurs, je savais même pas que c'était possible de faire autrement :D).
 
Enfin et surtout, j'ai pas très bien compris ton problème [:ddr555] Tu pourrais sortir la trace de l'Exception ou dire à quelle ligne elle se réfère, steuplé ?
 
EDIT : roh putain, 5 min au phone et chu grillaid 2000 fois [:ruisseau de larmes]


Message édité par Taiche le 01-02-2003 à 17:38:35
n°298957
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:38:42  profilanswer
 

tu pouvais laisser un for, y a pas de mal. ca serait d'aillerus peut etre plus lisible, surtout en initialisant estdedans=false dans le premier statement du for

n°298959
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:40:04  profilanswer
 

comme dit taiche, oublie le pascal: déclare tes varaibles au plus pres de leur initialisation

n°298970
EpoK
Let's burn
Posté le 01-02-2003 à 17:47:26  profilanswer
 

++Taz a écrit :

comme dit taiche, oublie le pascal: déclare tes varaibles au plus pres de leur initialisation


 

Code :
  1. while(st.hasMoreElements())
  2.  {
  3.   mot = (String)st.nextElement();
  4.   for(i=0,EstDedan=false; (i<lex.size()) && (!EstDedan) ;i++)
  5.   {
  6.    m = (lex.get(i)).toString();
  7.    EstDedan = (mot.equals(m));
  8.   }
  9.   if(!EstDedan)
  10.   {
  11.    sb = new StringBuffer(mot);
  12.    lex.add(sb);
  13.   }
  14.  }


 
pr son exemple j'avai pas tro le choi ... je cré le stringbuffer ke kan je suis sur ke je le mot rentre ds le vector

n°298973
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 01-02-2003 à 17:50:33  profilanswer
 

EpoK a écrit :


pr son exemple j'avai pas tro le choi ... je cré le stringbuffer ke kan je suis sur ke je le mot rentre ds le vector


 
Ouais non mais c'que je veux dire c'est qu'il ne faut pas écrire

Code :
  1. sb = new StringBuffer();


 
mais plutôt :

Code :
  1. StringBuffer sb = new StringBuffer();

n°298974
lorill
Posté le 01-02-2003 à 17:53:08  profilanswer
 

EpoK a écrit :


pr son exemple j'avai pas tro le choi ... je cré le stringbuffer ke kan je suis sur ke je le mot rentre ds le vector


 
déclaration != instanciation

n°298976
EpoK
Let's burn
Posté le 01-02-2003 à 17:54:28  profilanswer
 

Taiche a écrit :


 
Ouais non mais c'que je veux dire c'est qu'il ne faut pas écrire

Code :
  1. sb = new StringBuffer();


 
mais plutôt :

Code :
  1. StringBuffer sb = new StringBuffer();




 
ok
 
mais là j'écrit sb = new StringBuffer(mot), je peu pas trop le faire avant d'avoir mot :)
 

n°298977
lorill
Posté le 01-02-2003 à 17:55:48  profilanswer
 

EpoK a écrit :


mais là j'écrit sb = new StringBuffer(mot), je peu pas trop le faire avant d'avoir mot :)


 
mais rien ne t'empeche de ne déclarer sb que dans ton if, plutot qu'en tete de fonction  [:sinclaire]

n°298978
Taz
bisounours-codeur
Posté le 01-02-2003 à 17:55:49  profilanswer
 

mais bordel, déclare tes varaibles la ou tu en as besoin et pas dans un bloc massif a chaque nouvelle fonction  :bounce:  :D

n°298982
EpoK
Let's burn
Posté le 01-02-2003 à 17:58:43  profilanswer
 

ouais  :sweat:

n°298991
Taz
bisounours-codeur
Posté le 01-02-2003 à 18:03:50  profilanswer
 

peut etre que tu ferais bien de changer le types de lex ou de l'ordonner, par ce que la recherche linéaire, c'est pas top.
 
personnellement, moi je penserais à un Set
 
http://java.sun.com/j2se/1.4/docs/ [...] l/Set.html
 
ton traitement serait alors
 

Code :
  1. public static void ajouter(TreeSet lex, StringTokenizer st)
  2. {
  3. while(st.hasMoreElements())
  4. {
  5.   lex.add(new StringBuffer((String)st.nextElement());
  6. }
  7. }

 

n°299026
EpoK
Let's burn
Posté le 01-02-2003 à 18:36:48  profilanswer
 

++Taz a écrit :

peut etre que tu ferais bien de changer le types de lex ou de l'ordonner, par ce que la recherche linéaire, c'est pas top.
 
personnellement, moi je penserais à un Set
 
http://java.sun.com/j2se/1.4/docs/ [...] l/Set.html
 
ton traitement serait alors
 

Code :
  1. public static void ajouter(TreeSet lex, StringTokenizer st)
  2. {
  3. while(st.hasMoreElements())
  4. {
  5.   lex.add(new StringBuffer((String)st.nextElement());
  6. }
  7. }

 
 


 
hum hum jai pas encore vu cette class
 
v jeté un oeil merci

n°299979
BifaceMcLe​OD
The HighGlandeur
Posté le 03-02-2003 à 12:40:31  profilanswer
 

EpoK a écrit :


 

Code :
  1. (...)
  2. for(i=0,EstDedan=false; (i<lex.size()) && (!EstDedan) ;i++)
  3. {
  4. m = (lex.get(i)).toString();
  5. EstDedan = (mot.equals(m));
  6. }
  7. (...)




Taz> Désolé de te contredire, mais normalement, le "for" ne doit être utilisé que quand on connait à l'avance le nombre d'itérations. Sinon, il  perd énormément de sa lisibilité, et il vaut beaucoup mieux utiliser "while".
 
Epok> Comme l'a dit lorill en tout début du topic, equals() s'invoque sur un Object et attend un Object en argument. Donc tu peux écrire :

Code :
  1. EstDedan = lex.get(i).equals(mot);


ou

Code :
  1. EstDedan = mot.equals(lex.get(i));


Et puis, en français, "dedans" prend un 's' final... :D
 
Enfin, à mon avis, il n'a pas besoin de booléen ici :

Code :
  1. List  lex     = ...;
  2. (...)
  3. int   numMots = lex.size();
  4. while (st.hasMoreElements()) {
  5.     Object  mot = st.nextElement();
  6.     int     i   = numMots;
  7.     while (i >= 0  &&  !mot.equals(lex.get(i))) {
  8.         i--;
  9.     }
  10.     // Pas trouve
  11.     if (i < 0) {
  12.         lex.add(new StringBuffer(mot));
  13.         numMots++;
  14.     }
  15. }


Maintenant, 2 choses :

  • A moins que tu aies besoin que plusieurs threads accèdent en même temps ton vecteur "lex", n'utilise pas "java.util.Vector", mais "java.util.ArrayList", c'est préférable. Dans tous les cas, ne déclare ton objet "lex" que comme une "java.util.List". Ca pourra être utile à l'avenir.
  • Si tu veux trier "lex", je te conseille de regarder du côté de "java.util.Collections.binarySearch(java.util.List list, Object key)". Tu pourras l'utiliser aussi bien pour trouver que pour insérer au bon endroit...

n°300136
Taz
bisounours-codeur
Posté le 03-02-2003 à 14:11:28  profilanswer
 

BifaceMcLeOD a écrit :


Taz> Désolé de te contredire, mais normalement, le "for" ne doit être utilisé que quand on connait à l'avance le nombre d'itérations. Sinon, il  perd énormément de sa lisibilité, et il vaut beaucoup mieux utiliser "while".


 
 :heink: étant donné que ici le parcours est fait par index, le for me parait au contraire sémantiquement plus correcte et plus lisible qu'un while avec une variable index initialisée on ne sait ou

n°300140
BifaceMcLe​OD
The HighGlandeur
Posté le 03-02-2003 à 14:16:14  profilanswer
 

Tout dépend de quoi on parle : du "for" C ou du "for" algorithmique. Parce que je te rappelle qu'en algorithmique pure, le "for" s'écrit :

for i in [value1, value2] loop ...


Il n'est donc pas question de pouvoir y loger une autre condition que "i < value2"...

n°300271
EpoK
Let's burn
Posté le 03-02-2003 à 17:11:50  profilanswer
 

c'est bon là j'ai plus besoin de while ni de for, falai juste trouvé la bonne méthode dans la doc ... ;)
 

Code :
  1. public static void ajouter(Vector lex, StringTokenizer st)
  2. {
  3.  int i;
  4.  boolean EstDedan;
  5.  String mot;
  6.  String motvector;
  7.  while(st.hasMoreElements())
  8.  {
  9.   mot = (String)st.nextElement();
  10.   EstDedan=false;
  11.   EstDedan=lex.contains(mot);
  12.   if(!EstDedan)
  13.   {
  14.    lex.add(mot);
  15.   }
  16.  }
  17. }

n°300389
benou
Posté le 03-02-2003 à 18:41:06  profilanswer
 

EpoK a écrit :

 boolean EstDedan;


les variables avec des une majuscule au début ca sux !

n°300401
Cherrytree
cn=?
Posté le 03-02-2003 à 19:30:14  profilanswer
 

benou a écrit :


les variables avec des une majuscule au début ca sux !


Ouais ça c'est la convention MS.


---------------
Le site de ma maman
n°300930
BifaceMcLe​OD
The HighGlandeur
Posté le 04-02-2003 à 14:28:59  profilanswer
 

Oui, et puis, il y a des lignes de code inutiles ici.
A quoi ça sert par exemple d'initialiser "EstDedan" puisqu'à l'instruction suivante, tu lui affectes de toute façon une valeur ? Et à quoi servent "i" et "motvecteur" ?
 
Par ailleurs, Vector, comme sa superclasse List, contient des instances d'Object, pas de String, donc il est inutile de caster le retour de nextElement() en String (ou alors utilise la méthode nextToken(), qui te renvoie directement une instance de String).
Rappelle-toi qu'un cast alourdit l'écriture et n'est jamais gratuit à l'exécution en Java. Alors autant les éviter lorsqu'ils sont inutiles.
 
En fait, je te suggère plutôt d'écrire :

Code :
  1. public static void ajouter(Vector lex, StringTokenizer st) {
  2.   while (st.hasMoreElements()) {
  3.     Object  mot = st.nextElement();
  4.     if (!lex.contains(mot)) {
  5.       lex.add(mot);
  6.     }
  7.   }
  8. }


Tu noteras que ce code est strictement équivalent au tien, mais il ne contient que le code nécessaire. Or moins de lignes de code, c'est d'autant de moins de code à maintenir ensuite.


Message édité par BifaceMcLeOD le 04-02-2003 à 14:30:16
n°300948
benou
Posté le 04-02-2003 à 14:36:23  profilanswer
 

et temps qu'à faire, autant utiliser un Set puisque c'est ca que tu veux (HashSet par exemple).
 

Code :
  1. public static void ajouter(Set lex, StringTokenizer st) {
  2.    while (st.hasMoreElements()) {
  3.       lex.add(st.nextElement());
  4.    } 
  5. }


 
en plus ce sera plus rapide ...

n°301090
BifaceMcLe​OD
The HighGlandeur
Posté le 04-02-2003 à 16:03:34  profilanswer
 

Yup !  :jap:

n°301245
Taz
bisounours-codeur
Posté le 04-02-2003 à 17:39:48  profilanswer
 

benou a écrit :

et temps qu'à faire, autant utiliser un Set puisque c'est ca que tu veux (HashSet par exemple).
 

Code :
  1. public static void ajouter(Set lex, StringTokenizer st) {
  2.    while (st.hasMoreElements()) {
  3.       lex.add(st.nextElement());
  4.    } 
  5. }


 
en plus ce sera plus rapide ...

ce que j'ai déjà proposé 1 miyion de posts auparavant. mais moi j'aurais plutot dit un SortedSet (TreeSet)

n°301252
benou
Posté le 04-02-2003 à 17:51:37  profilanswer
 

++Taz a écrit :

ce que j'ai déjà proposé 1 miyion de posts auparavant. mais moi j'aurais plutot dit un SortedSet (TreeSet)


ha oui tiens ...
 
pourquoi un TreeSet ?
c'est plus lent et ca a juste un intérêt si tu veux ordonner la collection ...

n°301260
Taz
bisounours-codeur
Posté le 04-02-2003 à 18:07:05  profilanswer
 

ben je sais pas :D, histoire de montrer que ça existe et peut etre pour faire une démo. pi faut voir que c'est souvent plus facile de faire une fonction de comparaison qu'une bonne fonction de hashage

n°301262
benou
Posté le 04-02-2003 à 18:09:19  profilanswer
 

ok mais bon, la c'est des String. Elle est déjà tout faite la fonctione de hashage  :o  
 
:)

n°301268
Taz
bisounours-codeur
Posté le 04-02-2003 à 18:18:07  profilanswer
 

tout en effet

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Excusez moi je jouer au boulet mais je capte pas une erreur java ...

 

Sujets relatifs
Applet Java pour connection SSHprocesseur java...
[JAVA - ORACLE] Développement en java à la place de PL/SQLMsg queue en java
Erreur de compilation avec un makefileDifferences entre Java - J2EE - J2SE
[Java] Format de Date - resolu - soltion inside[ Java ] gestion du temps
[JAVA] programmation d'un bot de moteur de recherche[C] message d erreur a la compilation (linking)
Plus de sujets relatifs à : Excusez moi je jouer au boulet mais je capte pas une erreur java ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR