1

再帰を使用して文字列を反転しようとしていますが、特別な工夫として、指定されたインデックスから開始して、インデックスに含まれる文字を返し、そのインデックスの後の残りの文字列を反転して、2つを1つの出力に結合する必要があります。私はこれを実行しようとしましたが、配列の範囲外の例外が発生することがあり、このhellooooのテストがllooooooとして出力されるなど、本来あるべき文字よりも多くの文字が表示されることがあります。2番目のパラメーターの必要性がわかったときに本当に迷子になったので、このコードを微調整するための助けをいただければ幸いです。

  public class ReverseTest
    {
        public static void main(String[] argv) 
        {
            System.out.println(reverse("a", 0));
            System.out.println(reverse("hi", 0));
            System.out.println(reverse("helloooo", 2));
        }


        public final static String reverse(String s, int ind)
        {
            int length = s.length(); //get string length

            if (length <= 1) //if length is 1 or lower just repeat the string nothing to do
                return s; //return string
            else //if we have something to work with...
                return s.substring(ind) + reverse(s.substring(ind + 1, length - 1), ind); //return substring of necessary index + reverse the rest and display in one string
        }
    }
4

3 に答える 3

1

あなたのバージョンの何が問題なのかわかりませんが、直感的な実装であることがわかったものに従って、独自のバージョンを構築しました。

private static String reversePartially(String initial, int target) {
    return reversePartially(initial, target, target);
}

private static String reversePartially(String initial, int index, int target) {
    // if we are at the target index put the character at the front
    if(index == target) return initial.charAt(target) + reversePartially(initial, index + 1, target);
    // if we are in the second part return the characters reversed
    if(index > target) return reversePartially(initial, index + 1, target) + initial.charAt(index);
    // base condition
    if(index == initial.length()) return "";
    return "";
}
于 2012-07-14T01:06:04.660 に答える
0

これは、上記の問題に対する実際の解決策です。このコードはテストされています。すべてのベスト..よろしく:AmitSinha。

import java.io.*;
import java.lang.*;
import java.util.*;
public class RevString
{
    public String reverse(String s, int index )
        {
            if( index>0 )
            {
                return s.charAt( --index) + reverse( s, index);
            }
            return "";
        }
        public static void main(String[] args)throws IOException
        {
            DataInputStream in=new DataInputStream(System.in);
            String a;// the given string
            System.out.println("Enter a String");
            a=in.readLine();
            RevString obj=new RevString();
            int l=a.length();  // calculates Length of String
            System.out.println(obj.reverse(a,l));  // Pass Parameter as String, Length.
        }
}
于 2012-12-21T19:46:35.957 に答える
0

これは HW かもしれないので、ヒントを示します。問題の2つの部分を混同していると思います

  1. 部分文字列をインデックス i から最後まで反転します
  2. 0 から i-1 までの部分文字列を i の反転に追加して末尾に追加します

これら2つを次のような関数に分割してみてください

String reverse(String s);
String reversePart(String s, index i);

2 番目の関数が最初の関数を呼び出します。インデックス パラメータを使用せずに、文字列を反転する再帰関数を作成できます。

于 2012-07-14T00:52:42.113 に答える