java类定义的设计问题

时间:2012-02-28 22:09:21

标签: java class constructor

关于以下用于检查回文的java程序,我不明白为什么它必须包含private String pal;来定义这个类。这是一个设计问题,如果删除这行代码会导致任何问题吗?

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

2 个答案:

答案 0 :(得分:0)

它必须包含该私有字段,以便它可以存储构造函数参数足够长,以便在有人调用isPalindrome方法时使用。

只需查看pal使用的所有位置:这些都在类的实例范围内,但不在构造函数的范围内。如果未声明该字段,isPalindrome将无法访问此数据。

答案 1 :(得分:0)

从我看到的,你所有的Palindrome课程都在检查字符串是否是回文。显然,你不需要这样一个私有的String pal。

实际上,你应该让这个类成为一个实用程序类,而不是像这样的静态方法 -

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

然后你可以这样调用这个方法 -

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

如果您的所有类正在执行的是检查字符串是否为回文,则绝对不需要像pal这样的实例变量。