void reverse() メソッドの作成を支援し、再帰を使用して完全な文を反転します (Java)

StackOverflow https://stackoverflow.com/questions/1869434

  •  18-09-2019
  •  | 
  •  

質問

文字列の最初の文字を削除し、残りの部分文字列の後に配置して出力するものをすでに書きました。その指示は、再帰を使用して文の最初の文字を削除し、反転した残りの部分文字列に連結することで文を反転することでした。 、つまり。「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);  
  }
}
役に立ちましたか?

解決

あなたは再帰の概念を理解していますか?その場合は、基本ケース(再帰を停止する状態)を把握し、あなたはそれぞれの再帰的ステップで何をしたいのか。ヒント:あなたが逆転する文字列を取り、逆の文字列を返す再帰的な方法が必要になります。まっすぐHWの質問に答えるために、それはあなたが始める必要があります。

つもりはありません

EDIT:(もう一つのヒント)ボイドリバース()メソッドの再帰を作成しようとしないでください。それは実際に反転しない別、プライベート再帰的なメソッドを呼び出しています。

他のヒント

これは宿題なので、始めるためのヒントをいくつか提供します。

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

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

あなたは再帰関数を書きたい場合は、

一般的に、あなたは自分自身内の関数を呼び出すことになります。たとえばます:

void fn() {
    fn() 
}

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

あなたのケースでは、あなたは(ハローが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 の:私は、発現された制約に一致するように逆変形例

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;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top