2013-10-28 1 views
0

내 프로그램에서 - 2 클래스가 있고 PalindromeTester는 Palindrome에서 findPalindrome 메서드를 참조해야합니다. 그러나, 일어나는 일은 findPalindrome 메서드에 전달 된 값이 레벨이나 엄마 또는 아빠 또는 부인과 같은 문자열을 테스트 할 때에도 항상 입력 된 문자열이 회문이 아님을 반환한다는 것입니다.Palindrome 방법 및 비교

일부 개선 사항을 제안 할 수 있습니까? 나는 문자열 찾기를 제대로하지 않는 findPalindrome 메서드를 사용한다고 생각합니다. 나는 그것의 방법을 생각하지만, 누군가 다른 사람이 자유롭게 제안한다고 생각한다면. 마지막 문자를 두 번째로 가져 와서 다시 작성한 다음 원본 문자열과 비교합니다.

import java.util.Scanner;//import scanner class 

public class PalindromeTester//class 
{ 
    public static void main(String args[])//main method 
    { 
     Scanner in = new Scanner(System.in); //scanner object 
     String palindrome = new String(); //string to accept user input 

     String end = new String("q"); //string to determine user quitting 

     for (int a = 0; a >= 0; a++){ //enter loop 
     System.out.println(); 
     System.out.println("Enter a string to check if it is a palindrome"); //ask for initial string 
     System.out.println(); 
     System.out.println("Continue entering strings until you are done. When you are done, enter q to quit."); //remind user to enter q to quit 
     palindrome = in.nextLine();//take in string input 
     Palindrome original = new Palindrome(palindrome); //palindrome object and passed palindrome to the constructor...but no value yet...so? 
     original = original.findPalindrome(); //call findPalindrome to determine if palindrome is a palindrome 

     if (palindrome.equalsIgnoreCase(end)) //if palindrome is q and since end is q and if they are equal, a=-2. 
     a = -2; //when incrementing the max value if ++ will be -1. since -1 is not >= to 0 then for loop exits. 
     System.out.println("Thanks for trying this program"); 

    } 
    } 
} 

_____________________________________________________________ 

    public class Palindrome { 
     String myPalindrome; 
     String myReverse; 

     public Palindrome(){ 
     myPalindrome = new String(""); 
     myReverse = new String(""); 
     } 

     public Palindrome(String palindrome){ 
     myPalindrome = palindrome; 
     } 

     public String findPalindrome(){ 

      int length = myPalindrome.length(); 

      for (int i = length - 1 ; i >= 0 ; i--) 
      myReverse = myReverse + myPalindrome.charAt(i); 

      if (myPalindrome.equals(myReverse)) 
      System.out.println("Entered string is a palindrome."); 
      else 
      System.out.println("Entered string is not a palindrome."); 

      return (""); 
     } 


    } 
+1

디버깅을 시도 했습니까? – BobTheBuilder

+0

Palindrome의 한 종류 인 변수 원본을 확인하십시오. findPalindrome() 메서드가 (original.findPalindrome())을 호출하면 String 유형을 반환합니다. 다음과 같은 작업을 수행 할 수 없습니다. original = original.findPalindrome(); – MouseLearnJava

+0

이 코드는 처음부터 컴파일됩니까? – RishikeshDhokare

답변

1

문자열 생성자를 호출 할 때 코드가 myReverse를 초기화하지 못합니다. 따라서 null로 초기화되고 나중에 회문 문자열이 추가됩니다. 그것을 고쳐야합니다. 위의 코드는 컴파일 할 수없고 많은 근본적인 문제가있을 수 있습니다.

+0

+1 좋은 캐치 .. –

+0

기다려 ... 컴파일하고 질문 하나? 내 코드가 2 개의 서로 다른 프로그램이 있다는 것을 알고 계십니까? 내 Mac에서 drjava에 따르면 잘 컴파일하는 것 같습니까? 하지만 왜 내 역방향 개체가 초기화되지 않습니다 - PalindromeTester에서 나는 단지 문자열 매개 변수를 받아 생성자를 호출하기 때문에 알아. – allenlistar

+0

다음 줄에 오류가 발생하지 않습니까? Palindrome에 문자열을 어떻게 할당 할 수 있습니까? 'Palindrome original = 새로운 Palindrome (palindrome); original = original.findPalindrome();' – JackDVD