2016-10-06 5 views
0

나는 사용자에게 숫자를 물어볼 프로그램이 있으며, 그것이 회문인지 아닌지를 결정합니다. EOF가 입력 될 때까지 계속 숫자를 물어보기로되어 있습니다. - 지금까지는 숫자를 두 번 물었고 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

나는 palindrome 테스트를 그 자신의 방법으로 분리 할 것이다. 당신은

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

같은 한 줄의 방법으로 그렇게 할 수 있지만 문자의 첫 번째 절반을 반복하는 것을 선호하고 그런 다음

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

당신의 main 캔처럼 역으로 하반기에 비교 것 무한 루프 (입력 부족으로 끝나는)에서 호출하기

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

하, 죄송합니다. 사용자가 "EOF"문자열을 입력해야하는 것처럼 읽었습니다. –