2010-02-17 5 views
1

J'essaie d'écrire un programme qui convertit un long en une chaîne et vérifie s'il s'agit d'un palindrome, j'ai écrit ce qui suit jusqu'à présent, mais cela me donne une erreur de type incompatible, et je n'arrive pas à trouver ce qui le cause. : S Toute aide serait appréciée :)Programme pour vérifier un Palindrome

L'erreur se produit à la ligne 24 et il dit types incompatibles - trouvé vide mais attendu java.lang.String

public class programPalindrome 

{ 

private String go() 
{ 

    Input in = new Input(); 
    System.out.print("Enter Number: "); 
    return in.nextLine(); 
    long number = in.nextLong(); 
    String Palindrome = Long.toString(number); // converts the long into a string 
    String newAnswer = reverse(Palindrome); 
    String anotherAnswer = reverseCheck(Palindrome,newAnswer); 
    System.out.println("This is a Palindrome" + Palindrome); 
} 
// Check to see if the two argument Strings are the reverse of each 
    // other. 

private String reverseCheck(String Palindrome, String newAnswer) 
{ 
    if (Palindrome.compareTo(newAnswer) == 0) { 
    return System.out.println("It is a palindrome"); 
    } 
    else 
    { 
    return System.out.println("It is not a palindrome"); 
    } 
    } 

    // Return a String which is the reverse of the argument String 
    private String reverse(final String Palindrome) 
    { 
    String result = new String(); 
    int position = 0; 
    while (position < Palindrome.length()) 
    { 
    result = new Character(newAnswer.charAt(position)).toString() + result; 
    position = position + 1; 
    } 
    return result; 
} 


public static void main(String[] args) 
{ 
    new programPalindrome().go(); 
} 
} 
+0

pouvez-vous envoyer la trace de la pile? – vicatcu

+0

Veuillez ajouter le message d'erreur et la ligne sur laquelle il se produit. –

+0

Où obtenez-vous l'échec de la compilation? Pouvez-vous ajouter la pileTrace s'il vous plaît? – Luhar

Répondre

1

vous ne pouvez pas revenir System.out.println lorsque votre signature de la fonction indique que vous voulez renvoyer une chaîne ... vous avez une autre erreur de syntaxe sur la ligne

result = new Character(newAnswer... 

newAnswer ne peut pas être résolu dans ce cadre ... utilisez-vous un EDI comme Eclipse? Cela vous aiderait probablement beaucoup.

Voici un programme plus facile à faire la même chose:

public class programPalindrome 

{ 

    static public boolean isPalindromic(long value){ 
     String valueAsString = Long.toString(value); 
     String reverseString = (new StringBuffer(valueAsString)).reverse().toString(); 
     if(valueAsString.equals(reverseString)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 


    public static void main(String[] args) 
    { 

     System.out.println(args[0] + " is palindromic == " 
       + isPalindromic(Long.parseLong(args[0]))); 
    } 
} 
1

Eh bien, pour une chose, vous appelez System.out.println() qui renvoie void et tentez de renvoyer cela comme String dans votre fonction reverseCheck(). Décidez: voulez-vous imprimer le résultat, ou le retourner (peut-être en tant que bool)?

2

Essayez de changer

return System.out.println("It is not a palindrome"); 

à

return "It is not a palindrome"; 

et

return System.out.println("It is a palindrome"); 

à

return "It is a palindrome"; 

(Ajouté - De plus, il y a une erreur de logique dans votre méthode go(). Il imprime « Ceci est un palindrome » peu importe si cela fonctionne ou non ...)

+0

Merci pour votre aide, je n'ai fait Java depuis quelques semaines, donc c'est une question assez novice – smellyCat

+0

Bonne chance d'apprentissage ... Vous devriez probablement rechercher comment les méthodes Java fonctionnent. Essayez un tutoriel ou un bon manuel. Je pense que Sun a un très bon tutoriel. Et vous pouvez consulter ce post SO: http://stackoverflow.com/questions/1471636/im-new-in-java-what-to-read – froadie

1
private String go() 
{ 

    Input in = new Input(); 
    System.out.print("Enter Number: "); 
    return in.nextLine(); 
    long number = in.nextLong(); 
    String Palindrome = Long.toString(number); // converts the long into a string 
    String newAnswer = reverse(Palindrome); 
    String anotherAnswer = reverseCheck(Palindrome,newAnswer); 
    System.out.println("This is a Palindrome" + Palindrome); 
} 

Le compilateur ne devrait pas vous laisser sortir avec mettre le code inaccessible après le retour. Je ne pense pas que vous compreniez comment fonctionnent les fonctions.

1

Dans votre méthode reverseCheck(), vous essayez de renvoyer un void mais vous avez le type de retour répertorié comme chaîne. System.out.println() renvoie void - il imprime simplement à l'écran. Au contraire, retourner la chaîne « est un palindrome » ou « ce n'est pas un palindrome »

0
return System.out.println("It is not a palindrome"); 

println ne retourne rien.

0

StringBuffer a une méthode inverse donc cela devrait fonctionner:

public static boolean checkForPalindrom(String s){ 
    StringBuffer buf=new StringBuffer(s); 
    return s.equals(buf.reverse().toString()); 
} 
0

Cela ne veut pas expliquer ce qui ne va pas avec votre code (il est déjà expliqué par d'autres), mais pourquoi ne pas essayer d'utiliser cette place :

public class SO { 
    public static void main(String[] args) { 
     System.out.println(isPalindrome("aaaaaa")); 
     System.out.println(isPalindrome("aaazzaa")); 
     System.out.println(isPalindrome("aaazaaa")); 
     System.out.println(isPalindrome("zzzbb")); 
     System.out.println(isPalindrome("zzbb")); 
    } 

    public static boolean isPalindrome(String word) { 
     for (int i = 0; i <= word.length()/2; i++) { 
      if (word.charAt(i) != word.charAt(word.length()-1-i)) { 
       return false; 
      } 
     } 

     return true; 
    } 
} 
2

Je l'ai fait quelque chose comme ceci, ci-dessous. D'abord, l'entrée de l'utilisateur, puis l'inverse de la chaîne.Ensuite, comparez la chaîne de l'utilisateur et inversez-la, si elle est la même chose -> Imprimez "Palindrom", sinon "Not Palindrom". Ajouté "ignoreCase" juste au cas où. ;)

public static void main(String[] args) 
{ 
    System.out.print("Enter the word: "); 
    Scanner userInput = new Scanner(System.in); 
    String word = userInput.nextLine(); 

    String drow = new StringBuilder(word).reverse().toString(); 

    if(word.equalsIgnoreCase(drow)) 
    { 
     System.out.print("Palindrom"); 
    } 
    else if (!word.equalsIgnoreCase(drow)) 
    { 
     System.out.print("Not Palindrom"); 
    } 
} 
+1

Ok, désolé. Ajout du commentaire – rav3n

Questions connexes