2016-10-06 1 views
0

J'ai un programme qui est supposé demander à l'utilisateur un numéro et il va déterminer s'il s'agit d'un palindrome ou non. Il est supposé continuer à demander des nombres jusqu'à ce que EOF soit entré - Jusqu'à présent, il demande le numéro deux fois et ne semble pas faire la boucle while correctement.Java palindrome jusqu'à EOF

Toute idée est appréciée

import java.util.Scanner; 
public class PalindromeEOF 
{ 
public static void main(String args[]) 
{ 
    Scanner scanner = new Scanner(System.in);   
    System.out.println("Enter a number to check if it is a palindrome:"); 

    String num = scanner.nextLine(); 
    String reverse = ""; 

    while (scanner.hasNextLine()) 
    { 
     for (int i = 0; i<num.length(); i++) 
     { 
      reverse = num.charAt(i) + reverse; 
     } 
     if (num.equals(reverse)) 
     { 
      System.out.println("\nEntered number IS a palindrome."); 
     } 
     else 
     { 
      System.out.println("\nEntered number is NOT a palindrome."); 
     } 
     System.out.println("\nEnter a number to check if it is a palindrome:"); 
     num = scanner.nextLine(); 
     reverse = ""; 
    } 
    System.out.println("\nProgram ended on request"); 
} 
} 
+0

Où est indiqué «numAsString»? –

+0

mon erreur, j'ai changé cela en num = scanner.nextLine(); au lieu de numAsString – Arima

+0

Avez-vous essayé d'exécuter votre code dans le débogueur? – n0rd

Répondre

0

Cela a fonctionné pour moi; sauf si vous avez besoin de num ou de reverse en dehors de la boucle while, cela devrait fonctionner.

import java.util.Scanner; 
public class PalindromeEOF 
{ 
    public static void main(String args[]) 
    { 
     Scanner scanner = new Scanner(System.in);   
     System.out.println("Enter a number to check if it is a palindrome:"); 

     while (scanner.hasNextLine()) 
     { 
      String num = scanner.nextLine(); 
      String reverse = ""; 

      for (int i = 0; i<num.length(); i++) 
      { 
       reverse = num.charAt(i) + reverse; 
      } 
      if (num.equals(reverse)) 
      { 
       System.out.println("\nEntered number IS a palindrome."); 
      } 
      else 
      { 
       System.out.println("\nEntered number is NOT a palindrome."); 
      } 
      System.out.println("\nEnter a number to check if it is a palindrome:"); 

     } 
     System.out.println("\nProgram ended on request"); 
    } 
} 
+0

Merci qui semblait faire l'affaire! – Arima

+0

@Scary Wombat^Z (Ctrl + Z) est la séquence EOF ASCII et termine la boucle while. – rLapchynski

+0

Veuillez accepter si ça marche. – rLapchynski

0

Je voudrais séparer le test de palindrome dans sa propre méthode. Vous pouvez le faire dans une méthode d'une ligne comme

public static boolean isPalindrome(String str) { 
    return new StringBuilder(str).reverse().toString().equals(str); 
} 

mais je préférerais itérer la première moitié des personnages et de les comparer à la seconde moitié en sens inverse comme

public static boolean isPalindrome(String str) { 
    if (str == null) { 
     return false; 
    } 
    char[] chars = str.toCharArray(); 
    for (int i = 0; i * 2 <= chars.length; i++) { 
     if (chars[i] != chars[chars.length - i - 1]) { 
      return false; 
     } 
    } 
    return true; 
} 

Ensuite, votre main peut invoquer cela dans une boucle infinie (se terminant par le manque d'entrée) comme

+0

@ScaryWombat Grâce à la référence 'scanner'' Scanner', j'ai testé ce code, donc je ne suis pas certain de ce que vous obtenez. Une façon dont il se termine est lorsque CTRL-d termine le flux stdin. –

+0

ha, désolé je lisais comme si l'utilisateur devait entrer dans la chaîne "EOF" –