2013-10-28 81 views
0

在我的程序下面 - 我有2個類,PalindromeTester應該指的是Palindrome中findPalindrome方法。然而,發生的事情是,傳遞給findPalindrome方法的值總是返回一個輸入字符串不是迴文,即使當我測試字符串,如水平或媽媽或爸爸或女士。迴文方法和比較

有人可能會提出一個改進?我很確定,我認爲它是我的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

請檢查變量原始,這是一種迴文類型。當findPalindrome()方法正在調用(original.findPalindrome())時,它返回一個String類型。你不能做以下事情:original = original.findPalindrome(); – MouseLearnJava

+0

此代碼是否首先編譯? – RishikeshDhokare

回答

1

當調用字符串構造函數時,您的代碼無法初始化myReverse。所以它被初始化爲空,並且後面附加了迴文串。你需要修復它。 說了上面的代碼甚至不能編譯並且有許多基本問題。

+0

+1 nice catch .. –

+0

等等......它編譯和一個問題?你知道我的代碼是2行不同的程序嗎?根據我的Mac上的drjava,它似乎編譯正常?但我知道爲什麼我的反向對象沒有初始化 - 因爲在PalindromeTester中,我只調用接受字符串參數的構造函數。 – allenlistar

+0

以下行不會引發任何錯誤?你如何分配一個字符串迴文? 'Palindrome original =新的迴文(迴文); original = original.findPalindrome();' – JackDVD