2016-10-06 5 views
0

私には、ユーザに数字を尋ねるプログラムがあり、それが回文かどうかを判断します。これは、EOFが入力されるまで数字を尋ね続けることになっています - これまでのところ、数字は2回尋ねられ、whileループを正しく実行しているようには見えません。EOFまでのJava palindrome

任意の洞察力は、これは私のために働いた

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

'numAsString'はどこで宣言されていますか? –

+0

私の間違いは、num = scanner.nextLine()に変更しました。 numAsStringの代わりに – Arima

+0

デバッガでコードを実行しようとしましたか? – n0rd

答えて

0

を高く評価しています。 whileループの外側にnumまたはreverseが必要な場合を除き、動作するはずです。

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

トリックをやったようですね! – Arima

+0

@Scary Wombat^Z(control + Z)はASCII EOFシーケンスで、whileループを終了します。 – rLapchynski

+0

問題がなければ受け入れてください。 – rLapchynski

0

私は回文テストを独自の方法に分離します。あなたのmain缶その後

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

のような1行の方法ではなく、私は文字の最初の半分を反復処理し、

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; 
} 

のように逆に後半にそれらを比較することを好むことを行うことができます無限ループ(入力の欠如で終わる)のように呼び出す

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    while (true) { 
     System.out.println("Enter a number to check if it is a palindrome:"); 
     if (!scanner.hasNextLine()) { 
      break; 
     } 
     String num = scanner.nextLine(); 
     if (isPalindrome(num)) { 
      System.out.printf("%s is a palindrome%n", num); 
     } else { 
      System.out.printf("%s is NOT a palindrome%n", num); 
     } 
    } 
    System.out.println("Program ended on request"); 
} 
+0

@ScaryWombat 'scanner'の' Scanner'リファレンスを通して、私はこのコードをテストしましたので、あなたが何を得ているのか分かりません。 CTRL-dがstdinストリームを終了したときに終了します。 –

+0

ha、申し訳ありませんが、私はユーザーが文字列 "EOF" –