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
Bonjour,

je dois écrire un petit programe qu'à l'aide d'une Pile construit avec un tableau determine si un mot ou une phrase est un palindrome. Il y a une erreur qui saute tout le temps et je n'arrive pas à voir d'où sa peut venir. C'est dans la méthode est_Palindrome().

Voici le code :


import java.util.Scanner;

public class Palindrome {
Character[]tc = new Character[100];
Pile<Character>p = new Piletab<Character>(tc,tc.length);
public String phrase;

public Palindrome (String s) {
Scanner clavier = new Scanner(System.in);
System.out.println("Introduisez la phrase ou le mot à analyser");
phrase = clavier.next().toLowerCase().replaceAll(" ","");

for (int i=0;i<=phrase.length()-1;i++){
char t = phrase.charAt(i);
p.push(t);
}
}

public void est_Palindrome() {
String reponse = "Ce n'est pas un palindrome";
while(!p.estVide()){
for (int i=0;i<=phrase.length();i++){
if (p.top() == phrase.charAt(i)) {
reponse = "C'est un palindrome";
p.pop();
}else {reponse = "Ce n'est pas un palindrome";}
}
}
System.out.println(); System.out.println(reponse);
}
}


et la classe avec le main :

public class MainPalindrome {
public static void main(String[]args){

Palindrome p1 = new Palindrome("");
p1.est_Palindrome();
}
}


Merci pour votre aide.

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 ??
0
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
Bonsoir,

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 !
0