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();
}
}