2012-02-28 63 views
-2

關於下面的java程序檢查迴文,我不明白爲什麼它必須包含private String pal;來定義這個類。這是一個設計問題,如果刪除這行代碼會導致任何問題嗎?關於java類定義的設計問題

public class Palindrome { 
    private String pal; 

    public Palindrome(String initPal) { 
     pal = initPal.toUpperCase(); 
    } 

    public boolean isPalindrome() { 
     if (pal.length() <= 1) {  
      return true;   
     } 
     char first = pal.charAt(0); 
     char last = pal.charAt(pal.length()-1); 

     if (Character.isLetter(first) && Character.isLetter(last)) {  
      if (first != last) {   
       return false;   
      } 
      else {  
      Palindrome sub = new Palindrome(pal.substring(1,pal.length()-1)); 
      return sub.isPalindrome(); 
      } 
     } 
     else if (!Character.isLetter(first)) { 

      Palindrome sub = new Palindrome(pal.substring(1)); 
      return sub.isPalindrome();  
     } 
     else { 

      Palindrome sub = new Palindrome(pal.substring(0,pal.length()-1)); 
      return sub.isPalindrome();  
     } 
    } 

    public static void main(String[] args) { 
     Palindrome p1 = new Palindrome("abcdcba."); 
     System.out.println(p1.isPalindrome()); 
    } 
} 
+1

那麼,你的類需要一些字符串屬性,所以調用者設置要分析的字符串,然後,檢查它是否是迴文,是嗎?適當的縮進有助於可視化類別的內容 – Alfabravo 2012-02-28 22:19:21

+0

如果將其刪除,會發生什麼情況:-)只需嘗試一下 – kleopatra 2012-02-29 10:30:45

回答

0

它必須包括私有字段,以便它可以存儲構造函數的參數足夠長的時間被用來當有人呼叫isPalindrome方法。

只要看看pal被使用的所有地方:這些都在類實例的範圍內,但超出構造函數的範圍。如果該字段未被聲明,那麼isPalindrome將無法​​訪問此數據。

0

從我所看到的,你所有的迴文類正在做的是檢查一個字符串是否是迴文。顯然,你不需要一個私人的字符串朋友這種類。

事實上,你應該讓這個類的實用程序類,而是有像這個 -

public static boolean isPalindrome(String string) 
    { 
     // your logic here. 
    } 

一個靜態方法,然後,您可以調用此方法像這樣 -

String string = "aabaa"; 
boolean isPalindrome = Palindrome.isPalindrome(string); 

是絕對如果所有的類都在做,就不需要像pal這樣的實例變量來檢查字符串是否是迴文。

+0

最後,如果沒有屬性,是否應該不成爲其他地方的方法?我的意思是,這個類不會是一個抽象的東西,依賴不會被注入,等等...... – Alfabravo 2012-02-28 22:57:46

+0

是的,它可以放在實用程序類。 – CodeBlue 2012-02-28 22:59:50