0

文字列の最初の文字を削除し、残りの部分文字列の後に置いてから印刷するものをすでに作成しました。手順では、文の最初の文字を削除して再帰を使用して文を反転し、反転した残りの部分文字列に連結します。 、すなわち。「Hello」は「olleH」を生成します。しかし、再帰の部分についてはわかりません。助けていただければ幸いです。ありがとうございます。これは私のコードです:

public class Sentence {

   private String sentence;

   public Sentence(String astring) {
      sentence = astring;
   }

   public void reverse(){

   String firstChar = sentence.substring(0,1);

   String remainingSen = sentence.substring(1,sentence.length());

   System.out.println(remainingSen+firstChar);  
  }
}
4

4 に答える 4

1

これが宿題であることを見て、始めるためのヒントをいくつか示します。

  • 再帰メソッドは、作業の一部を実行するために自分自身を呼び出します
  • reverse()引数を取りString、文字列の逆バージョンを返すメソッドは、それ自体を呼び出すことができます。
  • 最初の文字を削除して、残りの反転した文字の最後に追加すると、作業は完了です。

上記のヒントを理解すれば、問題は解決しているはずです:-)

于 2009-12-08T20:05:06.410 に答える
1

一般に、再帰関数を記述したい場合は、それ自体の中で関数を呼び出すことになります。例えば:

void fn() {
    fn() 
}

この例は明らかに無限ループになります。

あなたの場合、定義された状態(HelloがolleHに変換される)に到達するまで、逆関数を繰り返し呼び出す必要があります。

public class Sentence {

  private String sentence;

  // ... etc ...

  public void reverse() {
      // Base Case: When do you want this to end? This statement is designed
      // to end the recursion when a desired state is reached

      // some sort of string manipulation (which you have already worked on)

      // call reverse() to continue the 'looping' until 
      // a desired _case_ is reached
  }
}

これは宿題の質問だと思いますが、まもなく期限が来るので、正確な答えは提供しません...

更新1:表現された制約に一致するように逆の例を変更しました。

于 2009-12-08T20:12:06.300 に答える
0
public void reverse()
{
    if(text.length() > 0)
    {
        String first = text.substring(0,1);
        String remaining = text.substring(1);

        Sentence shorter = new Sentence(remaining);
        shorter.reverse();

        text = shorter.text + first;
    }
}
于 2013-03-11T00:31:23.930 に答える
0

再帰の概念を理解していますか?もしそうなら、基本ケース(再帰を停止する条件)と各再帰ステップで何をしたいのかを理解してください。ヒント:文字列を反転して、反転した文字列を返す再帰メソッドが必要になります。HWの質問に正直に答えるつもりはありませんが、それで始められるはずです。

編集:(もう1つのヒント)void reverse()メソッドを再帰的にしようとしないでください。実際に反転を行う別のプライベート再帰メソッドを呼び出してもらいます。

于 2009-12-08T20:05:13.883 に答える