2009-10-30 5 views
1

J'avais une question concernant un programme de base que j'écrivais si un mot tel que racecar était un palindrome ou non.Vérification pour voir si une chaîne est un palindrome avec String.equals()

Toutes mes méthodes qui inversent la chaîne, dépouillent le travail de ponctuation mais celui qui détermine s'il s'agit d'un palindrome ne le fait pas.

/** 
* Determines if a series of letters makes a palinedrome 
* 
* @param str All punctuation and spaces have been removed 
*    before this method is called. 
* @return true if phrase is a palindrome, 
*   false otherwise. 
*/ 
public boolean isPalindrome(String str) 
{ 
    String d = reverseString (str); 
    return(str.equals (reverseString (str))); 

} 
+21

sent le devoir ... – jldupont

+0

Où définissez-vous reverseString? – EmFi

+3

Et la question est ...? – sinuhepop

Répondre

5

Si string reverseString(String string), et tous les espaces a été enlevé puis vérifier si quelque chose est un palindrome doit être

public boolean isPalindrome(String string) 
{ 
    return string.equals(reverseString(string)); 
} 

Cédée est sensible à la casse si votre définition de palindrome ne se soucie pas de boîtier, utilisez equalsIgnoreCase au lieu.

Si cela ne fonctionne pas, alors vous voudrez peut-être vérifier à nouveau vos méthodes de stripping et de reverseString.

+0

Est-ce que je manque quelque chose avec ce code? Il ressemble exactement à celui de la question à l'exception de la ligne "String d = ..." superflue. Ou est-ce juste là pour l'exhaustivité pour vos autres points? – paxdiablo

+0

Là pour l'exhaustivité. Tu as raison de dire que j'aurais pu mieux m'exprimer. En ce que le code qu'il a posté avant devrait être correct, et qu'il devrait chercher ailleurs où le problème réside. –

+0

D'accord, c'est logique. Et je suis d'accord que vous avez probablement raison sur la faute. Compte tenu de la quantité d'utilisation de String.equals(), il devrait être sans bug maintenant :-) – paxdiablo

6

D'accord, je ne suis pas sûr de ce but d est destiné à servir dans votre fonction, car il n'a jamais utilisé, mais, si vous voulez voir pourquoi votre fonction ne fonctionne pas, il suffit d'ajouter le code de débogage:

public boolean isPalindrome (String str) { 
    System.out.println ("DEBUG: original string = '" + str + "'"); 
    System.out.println ("DEBUG: reverse string = '" + reverseString (str) + "'"); 
    if (str.equals (reverseString (str))) 
     System.out.println ("DEBUG: returning true"); 
    else 
     System.out.println ("DEBUG: returning false"); 
    return str.equals (reverseString (str)); 
} 

Je parierais de l'argent là-bas être quelque chose de mal avec votre reverseString fonction (mais pas beaucoup d'argent). Ces instructions de débogage devraient vous donner assez pour comprendre où se situe le problème.

0

Votre problème est la méthode de chaîne inverse que vous n'avez pas montrée. Si cette méthode fonctionne correctement, votre méthode isPalindrome devrait fonctionner. Tout ce que vous devez faire est de réparer votre méthode de chaîne inverse.

Java ne possède pas de méthode de chaîne inverse native, et je vous recommande vivement d'écrire les vôtres. Cependant, Java a une méthode inverse pour StringBuffer et StringBuilder. StringBuilder est préféré à StringBuffer.

Utilisez la méthode equals pour comparer votre chaîne inversée à la chaîne d'origine

+0

-1 pour lui dire comment résoudre ses devoirs et le faire mal. StringBuilder est préféré à StringBuffer –

+0

Je n'ai pas écrit de code. Je viens de mentionner les moyens possibles de résoudre le problème. Est-ce que cela a vraiment de l'importance si stringbuilder est préféré au stringbuffer? C'est juste un problème simple et il a besoin d'expérimenter. –

+0

+1. @JM a raison, je pense. Il n'a pas affiché le code qui est ce que nous avons tous désappris pour les devoirs. Les indices sont relativement évidents, mais nécessitent encore un peu de travail de la part du PO. Et ce niveau de devoirs pourrait être pardonné pour choisir le moyen le moins efficace (je code Java tous les jours et je pense toujours que ma connaissance de l'ensemble de la bibliothèque est inférieure à 25%). C'est certainement plus efficace que de lancer votre propre * reverseString(). – paxdiablo

0

Le code devrait ressembler à ceci:

String d = reverseString (str); 
return(str.equals (d)); 

Vous ne devez pas appeler deux fois ReverseString()

PS: StringBuffer a une méthode qui inverse une chaîne.

0

Je suis sûr que vous avez déjà soumis vos devoirs maintenant, mais j'apprends java et j'avais besoin de la pratique, alors voici mon code pour vous. Il utilise un tableau char et inverse cela. Je suppose que la meilleure façon serait d'utiliser un StringBuilder, mais l'intention de vos devoirs est probablement apprendre à faire vous-même:

public class reverseString { 
    public static void main(String[] args) { 
     System.out.println("racecar is a palindrome: "+ isPalindrome("racecar")); 
    } 

    public static boolean isPalindrome(String str) 
    { 
     String d = reverseString (str); 
     return(str.equals (reverseString (str))); 
    } 

    private static char[] reverse(char[] input) { 
     int length = input.length; 
     char[] reversed = new char[length]; 
     for (int i=0;i<length;i++) { 
      reversed[length-i-1]=input[i]; 
     } 
     return reversed; 
    } 

    private static String reverseString(String input){ 
     String reversed = new String(reverse(input.toCharArray())); 
     return reversed; 
    } 
} 

Sortie:

racecar is a palindrome: true 

Si quelqu'un a des commentaires sur pourquoi mon code est nul, allumer. J'apprécierais toute critique constructive.

Questions connexes