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

+0

それを削除するとどうなりますか:-)単に試してみてください – kleopatra

答えて

0

それは十分な長さ、誰かがisPalindromeメソッドを呼び出すときに使用するコンストラクタのパラメータを格納できるように、そのプライベートフィールドを含める必要があります。

palが使用されるすべての場所を見てください:これらはすべてクラスのインスタンスのスコープにありますが、コンストラクタの範囲外です。フィールドが宣言されていない場合、isPalindromeがこのデータにアクセスする方法はありません。

0

私が見ているところでは、パインドロームのクラスは、文字列が回文かどうかをチェックしています。明らかに、あなたはそのようなクラスのためのプライベートString palを必要としません。

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

は絶対にあり -

実際には、あなたは、このように、このメソッドを呼び出すことができます。このクラスにユーティリティクラスを作成し、その代わりthis-

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

などの静的メソッドを持つ必要がありますすべてのクラスが実行している場合に、palのようなインスタンス変数を持つ必要はありません。文字列が回文かどうかを調べることです。

+0

最後に、属性がない場合、これは別の方法ではありませんか?つまり、そのクラスは何かの抽象化ではなく、依存関係は注入されません。 – Alfabravo

+0

はい、ユーティリティクラスに入れることができます。 – CodeBlue