Aide programme palindrome
Fermé
Newbie
-
8 août 2014 à 14:41
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 août 2014 à 22:57
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 août 2014 à 22:57
A voir également:
- Aide programme palindrome
- Programme demarrage windows 10 - Guide
- Désinstaller programme windows 10 - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programme démarrage windows 10 - Guide
2 réponses
Je viens de trouver un erreur dans la méthode est_Palindrome () :
- il faut changer la boucle : "for (int i=0;i<=phrase.length();i++)" pour "for (int i=0;i<=phrase.length()-1;i++)
Maintenant ça marche bien avec les mots mais pas du tout avec les phrases, même si j'ai ajouté "phrase = clavier.next().toLowerCase().replaceAll(" ",""); " pour changer tous les lettres à minuscules et enlever les spaces.
Des idées ??
- il faut changer la boucle : "for (int i=0;i<=phrase.length();i++)" pour "for (int i=0;i<=phrase.length()-1;i++)
Maintenant ça marche bien avec les mots mais pas du tout avec les phrases, même si j'ai ajouté "phrase = clavier.next().toLowerCase().replaceAll(" ",""); " pour changer tous les lettres à minuscules et enlever les spaces.
Des idées ??
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
8 août 2014 à 22:57
8 août 2014 à 22:57
Bonsoir,
C'est bizarrement codé tout ça. On s'attendrait à avoir une méthode
Pour la classe Piletab je ne sais pas trop comment elle est faite, mais il n'y a aucune raison de lui passer un tableau dans le constructeur, si l'objet a besoin d'un tableau c'est au constructeur de le créer pas à l'appelant.
La Pile en elle même ne devrait d'ailleurs pas être créée au sein de la classe mais comme variable locale de la méthode, ça permet de créer une nouvelle pile à chaque appel, parce que si tu utilises deux fois la même pile pour deux appels différents de la méthode est_Palindrome, lors du deuxième appel il te restera encore des lettres du premier appel.
Ensuite via la méthode palindrome en soit, et là je suis perdu. À quoi sert ton while(!p.estVide()) ? Ta pile est censée se vider de 0 à n-1, ce qui correspond au nombre de caractères que justement tu as ajouté, donc à la fin tu dois avoir plus ou moins une pile vide, dans tout cas même s'il reste des caractères, pourquoi recommencer toute la boucle n fois ?
Enfin, dans ta boucle tu fais des affectations à chaque caractères, tu vas donc avoir n résultats différents, avec des alternances de "est un palindrome" ou "n'est pas un palindrome", et seul le dernier résultat va compter...
Exemple : "plop" va faire resultat="C'est un palindrome" car 'p'=='p', puis "Ce n'est pas un palindrome" car 'l' != 'o', encore "Ce n'est pas un palindrome" pour 'l' != 'o', et enfin "C'est un palindrome" car 'p'=='p', résultat : "plop" est un palindrome ? Je ne crois pas !
Au passage j'espère que tu auras noté que tu compares deux fois les même caractères, c'est totalement inutile.
Bref, il y a beaucoup de choses à revoir là dedans ! En particulier sur l'énoncé même, car l'utilisation des piles avec des boucles for ce n'est pas vraiment le concept, normalement avec des piles on fait de la récursivité.
D'ailleurs pour faire ça bien, je ne vois pas comment tu pourrais faire ça autrement qu'avec deux, voire trois piles...
Bon courage !
C'est bizarrement codé tout ça. On s'attendrait à avoir une méthode
public static boolean isPalyndrom(String text);mais au lieu de ça tu fais une classe Palindrome, un constructeur qui prend un String s qui ne sert à rien, dans le constructeur tu as println/Scanner ce que l'on ne fait jamais, les entrées/sorties c'est pour le main...
Pour la classe Piletab je ne sais pas trop comment elle est faite, mais il n'y a aucune raison de lui passer un tableau dans le constructeur, si l'objet a besoin d'un tableau c'est au constructeur de le créer pas à l'appelant.
La Pile en elle même ne devrait d'ailleurs pas être créée au sein de la classe mais comme variable locale de la méthode, ça permet de créer une nouvelle pile à chaque appel, parce que si tu utilises deux fois la même pile pour deux appels différents de la méthode est_Palindrome, lors du deuxième appel il te restera encore des lettres du premier appel.
Ensuite via la méthode palindrome en soit, et là je suis perdu. À quoi sert ton while(!p.estVide()) ? Ta pile est censée se vider de 0 à n-1, ce qui correspond au nombre de caractères que justement tu as ajouté, donc à la fin tu dois avoir plus ou moins une pile vide, dans tout cas même s'il reste des caractères, pourquoi recommencer toute la boucle n fois ?
Enfin, dans ta boucle tu fais des affectations à chaque caractères, tu vas donc avoir n résultats différents, avec des alternances de "est un palindrome" ou "n'est pas un palindrome", et seul le dernier résultat va compter...
Exemple : "plop" va faire resultat="C'est un palindrome" car 'p'=='p', puis "Ce n'est pas un palindrome" car 'l' != 'o', encore "Ce n'est pas un palindrome" pour 'l' != 'o', et enfin "C'est un palindrome" car 'p'=='p', résultat : "plop" est un palindrome ? Je ne crois pas !
Au passage j'espère que tu auras noté que tu compares deux fois les même caractères, c'est totalement inutile.
Bref, il y a beaucoup de choses à revoir là dedans ! En particulier sur l'énoncé même, car l'utilisation des piles avec des boucles for ce n'est pas vraiment le concept, normalement avec des piles on fait de la récursivité.
D'ailleurs pour faire ça bien, je ne vois pas comment tu pourrais faire ça autrement qu'avec deux, voire trois piles...
Bon courage !