0
public static boolean palindrome(String input, int i, int j)
 {
  if (i >= j)
   return true;
  if (input.charAt(i) == input.charAt(j))
  {
   i++;
   j--;
   palindrome(input, i, j);
  }
  else if (input.charAt(i) != input.charAt(j))
   return false;
 }

私の Java プラットフォーム (Eclipse) は、「戻り値の型がない」ため、このコードを動作として受け入れません。これで、適切なコーディング方法で、戻り値を 1 つだけ使用する方がよいことがわかりましたが、再帰に関しては、これは私にとってやや新しいことです。どうすればこれを行うことができますか?このメソッドの先頭でブール型をインスタンス化すると、メソッドが実行されるたびにその変数の新しいインスタンスが作成されます (そして、null または設定したものとしてインスタンス化されます)。メソッドはそれに値を割り当てません/返すことができません。

基本的に、Eclipse が常に実行するものとして受け入れる単一の戻り値を持つようにコードを変更するにはどうすればよいでしょうか? これはループを使って簡単に行うことができますが、再帰を使用してトピックにアプローチする方法がわかりません。

4

7 に答える 7

2

問題は、2 番目の if ステートメント内に return がないことです。charAt i と j が等しい場合、何も返されません。

コードの精神を維持するために、全体を次のように短縮します。

public static boolean palindrome(String input, int i, int j)
{
  if (i >= j)
  {
    return true;
  }

  if (input.charAt(i) == input.charAt(j))
  {
    return palindrome(input, i + 1, j - 1);
  }

  return false;
}
于 2009-10-16T19:38:48.693 に答える
1

あなたは確かにこれを行うことができます:

return palindrome(input, i, j);

ただし、読みやすさを向上させるために単一のリターンを使用することをお勧めします。これを試着してサイズを確認してください:

   boolean isPalindrome = false; 
   if (i >= j)
   isPalindrome = true;
   else if (input.charAt(i) == input.charAt(j))
  {
   i++;
   j--;
   isPalindrome = palindrome(input, i, j);
  }
  else if (input.charAt(i) != input.charAt(j))
   isPalindrome = false;
  return isPalindrome;
 }

そのブール値を常にインスタンス化します。ここで重要なのは、回文の戻り値をそのブール値に格納することです。

再帰部分は、回文の呼び出しで入ります。再帰サイクルの終わりに達したときにのみ回文であるかどうかを判断するため、すべての再帰呼び出しの後に最終的な値を返すだけです。

于 2009-10-16T19:36:04.200 に答える
1

2 番目の if ブロックでは、何も返しません。

値を返すように再帰呼び出しを変更するだけです。

  回文を返します(入力、i、j);

また、ついでに言うと、if ブロックで i++ と j-- を実行する必要はありません。代わりに i+1 と j-1 を使用して回文メソッドを呼び出すことができ、基本的に同じ効果があります。

于 2009-10-16T19:36:27.013 に答える
0

他のオプションはこれかもしれません:

boolean isPalindrome(String s) {

        boolean ret = true;

        if (s.length() == 1 || s.equals("")) {
            return ret;
        } else {
            char first = s.charAt(0);
            char last = s.charAt(s.length() - 1);
            if (first != last)
                ret = false;
            else if (s.length() > 2) {
                String partial = s.substring(1, s.length() - 1);
                ret = isPalindrome(partial);
            }
        }
        return ret;
    }
于 2013-11-02T05:18:21.527 に答える
0
        public static String palindrome(String input, int i, int j)
         {

            if (i >= j)
                return "-1";    

         //--------------------------------------------//   

          if (input.charAt(i) == input.charAt(j))
          {
              i++;
              j--;

         //--------------------------------------------//         

              palindrome(input, i, j);
              return "is palindrom";      
          }

         //--------------------------------------------//     

          else 
              return "not palindrom";
          }
           }
         //--------------------------------------------//
于 2013-03-12T10:02:05.253 に答える