0

私のコードはループのみを使用することを想定しています。文字列を逆にして、その逆の値を返すことを想定しています。逆の値を返す問題があり、その方法がわかりません。

public static String reverseString(String str){

for(int i =str.length()-1;i>=0;i--)



return str.charAt(i);// This wont return the value, gives me a error
                             // any tips?

}
4

2 に答える 2

1

Java を使用すると仮定すると、コードを次のように変更できます。

public static String reverseString(String str){

    StringBuilder sb = new StringBuilder();

    for(int i =str.length()-1;i>=0;i--){

        sb.append(str.charAt(i));
    }

    return sb.toString();

}

変更点は、StringBuilder オブジェクトを作成することです。投稿したコードは、文字列から抽出した最初の文字を返そうとしますが、これは必要なものではありません。文字列を逆方向に構築したいので、反復ごとに次の逆方向の char を StringBuilder に追加し、ループが終了したら、toString() を使用して StringBuild の文字列表現を返します。

この実装はより賢く、より迅速に行うことができますが、このタスクは学習プロセスの一部であると想定しているため、実際にループを実行したい場合に、コードで return ステートメントをループ内に配置してはならない理由を理解することがより重要です。複数回反復し、何かを返す前に各中間結果を保存します。

ドキュメンテーション:

http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

アップデート:

StringBuilder に関するohiodougのコメントに基づいて、StringBuilder クラスなしでそれがどのように行われるかを示すことも適切です。

import java.lang.StringBuilder;

public class Main
{
    public static void main(String [ ] args){

        String resultSimple = simpleReverseString("Hello World!");
        String resultSB = betterReverseString("Hello World!");
        System.out.println(resultSimple);
        System.out.println(resultSB);
        //Prints:
        //!dlroW olleH
        //!dlroW olleH
    }

    //Simple string concatenation. 
    //Uses the += operator.
    //Since s is already a String we don't need to use
    //toString() on it.
    public static String simpleReverseString(String str){

        String s = "";

        for(int i =str.length()-1;i>=0;i--){
            //s += str.charAt(i) is equal to
            //s = s + str.charAt(i)
            s += str.charAt(i);
        }
        return s;
    }        

    //Same as simpleReverseString, but uses the StringBuilder class
    public static String betterReverseString(String str){

        StringBuilder sb = new StringBuilder();

        for(int i =str.length()-1;i>=0;i--){
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }     
}
于 2013-12-03T00:42:47.430 に答える