2012-02-28 66 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