Palindrome

Résolu/Fermé
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 22 oct. 2014 à 01:58
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 22 oct. 2014 à 21:11
Slt tout le monde.
Je suis débutante en java et j'ai vraiment besoin de votre aide.
Donc voilà , j'ai fait un programme où on doit vérifier si une chaine est un palindrome ou pas.
Mais le problème c'est que même si je lui donne un palindrome il m'affiche qu'il ne s'agit pas de palindrome!!
code:

public class Palindrome {

	public static void main(String[] argc) {
		//Test 1
		String chaine="radar";		
		palindrome(chaine) ;
	

	}
   
	public static void palindrome(String ch){
		char[] chinv = new char[6] ;
		int ls = ch.length() ;
		int i;
		for(i=0;i<ls;i++){
			chinv[i]=ch.charAt(ls-1-i) ;
		}
		 chinv[ls]= '\0' ;
		 
	  if( chinv.equals(ch) ){
		  System.out.println( ch +" est un palindrome") ;
	  }
	  else
          System.out.println( ch + " n'est pas un palindrome") ;
		
	}
		 
}


J'ai fait des System.out.println pour vérifier , et j'ai trouvé que l'inversement de la chaine se fait correctement. Je ne sais vraiment pas où est le problème.
Merci ^^

3 réponses

KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975
22 oct. 2014 à 07:47
Bonjour,

Tu fais du Java ici, pas du C.

chinv.equals(ch)
sera toujours faux car
chinv
est un
char[]
et
ch
un
String
, ce n'est pas comparable.
De plus en Java il est faux de faire
chinv[ls]= '\0'
, l'inverse de "radar\0" c'est "\0radar".

Attention aussi à ton
new char[6];
il n'y a vraiment aucune raison de mettre un 6 en dur ici, tu vas avoir des erreurs si tu mets un mot plus long...

Regarde la documentation de String et éventuellement de StringBuilder
1
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
Modifié par haikei00X le 22/10/2014 à 11:42
Merci KX d'avoir lu mon code.
Je voulais savoir s'il y a moyen de comparer sans avoir à changer le type char, par exemple effectuer une conversion. Si non qu'est ce que je peux faire pour que ça marche.
J'ai essayé d'enlever la taille que j'ai mis en dur j'ai eu l'erreur suivante :
Variable must provide either dimension expressions or an array initializer
Est-ce que vous pouvez m'expliquer plus?
Merci ^^
0
KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975
22 oct. 2014 à 13:58
Déjà il faut désapprendre le C, en Java il faut penser objet, donc normalement tu n'as pas à manipuler directement le char[] mais tu utilises les méthodes de la classe String.

Alors effectivement tu pourrais faire comme ceci :
char[] chInv = ch.toCharArray();
...
String strInv = new String(chInv);
if (strInv.equals(ch))
    ...

Mais c'est assez lourd parce que ça oblige à recopier plusieurs fois le tableau des caractères.

Il vaut mieux faire toutes tes comparaisons avec charAt(i) directement sur le String.
Par exemple :
if (ch.charAt(i) != ch.charAt(ch.length()-i) return false;
0
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
Modifié par haikei00X le 22/10/2014 à 21:46
Merci KX pour ton aide .
Une autre question.
Est-ce que l'initialisation des variables et des tableaux est obligatoire en java?
0