A voir également:
- Anagramme java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
3 réponses
Anagramme c'est bien des mots qui ont exactement les meme lettres, mais dans un ordre différent et qui donne donc un nouveau sens ?
Si oui, tu peux alors commencer par te faire une méthode qui trouve un caractère dans une chaine. Une fois cette méthode faite, il ne te reste plus qu'à regarder caractère par caractère dans ta premiere chaine si chacun de ces caractère se trouve dans la deuxieme. Si un de ces caractères n'est pas trouvé alors ce n'est pas un anagramme.
Par contre, une fois fait cela, tu te rends compte que lorsqu'il y a des lettres en double (ou plus), ca plante (et oui). Donc à ce moment là tu corse un peu plus ton truc en ajoutant le fait qu'il y ai un booléen attaché à chaque lettre, indiquant si dans ton parcours de lettre (recherche) tu es déjà passé dessus ou non.
Voilà, l'idée, à toi de la développer maintenant. Pour ce faire, je te conseil de te faire une classe Lettre ayant une propriété lettre et un booléen de passage, les méthodes adéquats.
Puis une classe pour ton algo (enfin une méthode à toi de voir ou la placer ensuite) qui fait dans cet ordre :
- création d'un tableau d'objet Lettre correspond à chaque lettre de ta premiere chaine de caractère à comparer.
- idem pour la deuxieme chaine
- une méthode qui pour chaque caractère du premier tableau, va essayer de le trouver dans le deuxième tableau et si oui, alors modifier la valeur du booléan pour la lettre du deuxieme tableau, de maniere a ne pas repasser dessus pour une autre lettre. Si tu ne trouve pas une lettre, ce n'est donc pas un anagramme donc tu arret ton programme là et retourne un message adéquat à l'utilisateur.
Si oui, tu peux alors commencer par te faire une méthode qui trouve un caractère dans une chaine. Une fois cette méthode faite, il ne te reste plus qu'à regarder caractère par caractère dans ta premiere chaine si chacun de ces caractère se trouve dans la deuxieme. Si un de ces caractères n'est pas trouvé alors ce n'est pas un anagramme.
Par contre, une fois fait cela, tu te rends compte que lorsqu'il y a des lettres en double (ou plus), ca plante (et oui). Donc à ce moment là tu corse un peu plus ton truc en ajoutant le fait qu'il y ai un booléen attaché à chaque lettre, indiquant si dans ton parcours de lettre (recherche) tu es déjà passé dessus ou non.
Voilà, l'idée, à toi de la développer maintenant. Pour ce faire, je te conseil de te faire une classe Lettre ayant une propriété lettre et un booléen de passage, les méthodes adéquats.
Puis une classe pour ton algo (enfin une méthode à toi de voir ou la placer ensuite) qui fait dans cet ordre :
- création d'un tableau d'objet Lettre correspond à chaque lettre de ta premiere chaine de caractère à comparer.
- idem pour la deuxieme chaine
- une méthode qui pour chaque caractère du premier tableau, va essayer de le trouver dans le deuxième tableau et si oui, alors modifier la valeur du booléan pour la lettre du deuxieme tableau, de maniere a ne pas repasser dessus pour une autre lettre. Si tu ne trouve pas une lettre, ce n'est donc pas un anagramme donc tu arret ton programme là et retourne un message adéquat à l'utilisateur.
euh oui mais je dirais que si les longueurs des chaines sont différentes, ce ne sont pas des anagrammes, si ?
Un petit test pour comparer les longueurs au début de la méthode, et on ne fait qu'une fois la boucle de traitement... ^^
Un petit test pour comparer les longueurs au début de la méthode, et on ne fait qu'une fois la boucle de traitement... ^^
Ha ba dans ce cas oui, pas besoin de faire la deuxieme boucle, juste tester la longeur effectivement.
Sinon le indexOf == -1 correspond effectivement au fait que le caractère n'ai pas été retourné.
Par contre, il y a une chose que je ne comprends pas, c'est que normalement tu dois tester les lettres doubles etc... sinon ca ne marchera jamais ! Tu me dis que si mais tu n'as sans doute pas pris en compte le cas suivant :
mot1 = bateau
mot2 = aaaaaa
Avec le prog que tu demande, ces deux mots seront comptés comme des anagrammes, ce qui est loin d'etre le cas.
Sinon le indexOf == -1 correspond effectivement au fait que le caractère n'ai pas été retourné.
Par contre, il y a une chose que je ne comprends pas, c'est que normalement tu dois tester les lettres doubles etc... sinon ca ne marchera jamais ! Tu me dis que si mais tu n'as sans doute pas pris en compte le cas suivant :
mot1 = bateau
mot2 = aaaaaa
Avec le prog que tu demande, ces deux mots seront comptés comme des anagrammes, ce qui est loin d'etre le cas.
Je ne dois pas tenir compte de l'éventualité d'une lettre en double, on suppose que ce n'est pas le cas. Je dois également faire tout dans une seule méthode.
A preciser egalement, cette méthode doit etre suffisamment générale pour fonctionner avec n'importe quel mot, d'ailleurs on ne me les donne pas, juste str1 et str2.
Donc je dois faire 2 tableaux, un pour chaque string, dans lequel je met toutes les lettres présentes dans chaque mot ? Et ensuite comparer les 2 ?
Mais j'ai dit une connerie, pas besoin de mettre dans un tableau, tu as des méthodes pour la classe String qui te permettent de récupérér un char à un emplacement précis de ta string, regarde "charAt" ou un truc du genre.
private boolean isAnagramme ( String str1, String str2 ){ boolean anagramme = true; int i = 0; // --- Vérifie que les caractères de la chaine 1 // --- sont contenus dans la chaine 2 while ( i < str1.length() && anagramme == true ){ if ( str2.indexOf( str1.charAt(i) ) == -1 ) anagramme = false; else i++; } if ( anagramme == false ) return anagramme; // --- Idem pour la chaine 2 dans la chaine 1 anagramme = true; i = 0; while ( i < str2.length() && anagramme == true ){ if ( str1.indexOf( str2.charAt(i) ) == -1 ) anagramme = false; else i++; } return anagramme; }On fait le test 2 fois au cas ou la string 2 aie plus de caractère que la premiere, auquel cas il faut tester aussi pour elle.