Bonjour a tous et à toute !
Je viens vers vous car je cherche à développer un petit jeu en java et je me retrouve avec un comportement vraiment étrange... ou alors je passe à côté de quelques chose ^^
Je vous explique, j'ai une méthode qui évalue une réponse passé en paramètre avec une liste de mot clef...
J'ai choisit un HashSet pour l'ensemble contenant les mot clef mais n'étant qu'une débutante il se peut que ce choix ne soit aucunement justifié.
Ceci dit voici la méthode (bien plus parlant) :
Je suis désolé si c'est un peu lourd... mais je tenais à tout vous montrer afin que vous compreniez bien le problème.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 /* Methode qui test si la phrase passé en paramétre comporte des correspondances avec les mots contenu dans le tableau de la class */ private boolean testMotClef(String rep){ int tot = 0; // nb de mot clef trouvé das la réponse fournit par l'utilisateur int debut = -1; int fin = -1; int dernier_espace = 0; Pattern p = Pattern.compile(" "); Matcher m = p.matcher(rep); boolean existe = false; // lancement de la recherche while(m.find()) { if ( !existe ) { if ( debut != -1 && dernier_espace == 0 ) // Si une position est enregistré c'est que nous sommes dans le second passage et + { // j'ai la position de fin et de debut du mot String mot = rep.substring(debut, m.start()+1); debut = m.start()+1; // debut du mot suivant dans la réponse fournit par l'utilisateur // Le mot trouvé est il présent dans le tableau de mot clef? Iterator<String> it = mot_clef.iterator(); // iterateur pour parcourir le hashSet // on parcours l'ensemble while ( it.hasNext() ) { String o = (String) it.next(); System.out.println("o : "+o); System.out.println("mot : "+mot); if ( mot.equalsIgnoreCase(o) ) // Si les deux mots concordent { System.out.println("Le mot correspond :"+o); // On a trouvé un mot tot += 1; // Le nb de mot clef est il atteind? if ( tot >= this.nb_mc){ // Si ca correspond c'est gagné existe = true; System.out.println(nb_mc+" occurence ont était trouvé ! c'est gagné..."); break; } } } if ( rep.lastIndexOf(" ") == m.start() ){ dernier_espace = 1; } ------------------------------------------------------ }else if ( debut == -1 ) // On est au premier espace de la phrase => fin du premier mot { // on peut tester de 0 a debut pour recuperer le premier mot fin = m.start()+1; debut = m.start()+1; // début du second mot de la réponse fournit // On récupère le mot String mot = rep.substring(0, fin); // Le mot trouvé est il présent dans le tableau de mot clef? Iterator<String> it = mot_clef.iterator(); // iterateur pour parcourir le hashSet while ( it.hasNext() ) // Pour chaque éléments de l'ensemble { String o = (String) it.next(); // o reçoit les mot clef les un aprés les autres System.out.println("o : "+o); System.out.println("mot : "+mot); System.out.println(o.equalsIgnoreCase(mot)); if ( o.equals(mot) ) // et teste leurs concordance avec le mot extrait de la réponse { System.out.println("Le mot correspond :"+o); tot += 1; // On incremente le tot de correspondance } } // ------------------------------------------------------ } if ( dernier_espace == 1 ) // Il s'agit du dernier mot contenu dans la réponse de l'utilisateur { // je connait la position de fin => la longueur de la phrase fin = rep.length(); String mot = rep.substring(m.start()+1, fin ); // de l'espace +1 jusqu'a la fin // Le mot trouvé est il présent dans le tableau de mot clef? Iterator<String> it = mot_clef.iterator(); // iterateur pour parcourir le hashSet while ( it.hasNext() ) { String o = (String) it.next(); if ( o.equals(mot) ) // Si les deux mots concordent { System.out.println("Le mot correspond :"+o); // On a trouvé un mot tot += 1; System.out.println("il y a "+tot+" correspondance trouvé a ce stade"); // Le nb de mot clef est il atteind? if ( tot >= this.nb_mc){ // Si ca correspond c'est gagné existe = true; System.out.println(nb_mc+" occurence ont était trouvé ! c'est gagné..."); } } } } } } return existe; }
En effet grâce aux 'alert' je voit bien que les correspondances sont trouvé mais equals renvoie false dans tous les cas sauf le dernier
voici le débogage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // constructeur + ajout des mot clef à l'ensemble ... carteJeu1.lireQuestion(); carteJeu1.lireReponse(); carteJeu1.evaluerReponse("Sarkozy s'apelle Carla Bruni");Voila j’espère avoir été clair... mais en gros ma question est ^^ pourquoi le equals renvoie false alors que la correspondance existe?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 Comment s'appelle la femme du président de la France? Carla Bruni Sarkozy Le premier mot est :Sarkozy o : sarkozy mot : Sarkozy false o : carla mot : Sarkozy false o : Sarkozy mot : Sarkozy false o : bruni mot : Sarkozy false o : Bruni mot : Sarkozy false o : Carla mot : Sarkozy false o : sarkozy mot : s'apelle o : carla mot : s'apelle o : Sarkozy mot : s'apelle o : bruni mot : s'apelle o : Bruni mot : s'apelle o : Carla mot : s'apelle o : sarkozy mot : Carla o : carla mot : Carla o : Sarkozy mot : Carla o : bruni mot : Carla o : Bruni mot : Carla o : Carla mot : Carla Le mot correspond :Bruni il y a 1 correspondance trouvé a ce stade
Partager