0

我的代码假设只使用循环,我假设使字符串反向并返回该反向值。我在返回反向值时遇到问题,我不知道该怎么做。`

公共静态字符串 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 对象。您发布的代码尝试返回您从字符串中提取的第一个字符,这不是您想要的。您想反向构建字符串,因此在每次迭代中,您将下一个反向字符添加到您的 StringBuilder,当循环终止时,您使用 toString() 返回 StringBuild 的字符串表示形式。

您可以更智能、更快地完成此实现,但我认为此任务是学习过程的一部分,因此更重要的是您了解为什么您的代码不应在循环中放置 return 语句,而实际上您希望循环在返回任何东西之前迭代多次并保存每个中间结果。

文档:

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

更新:

根据ohiodoug对 StringBuilder 的评论,还应该展示在没有 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 回答
1

更新答案

public static String reverseString(String str){
     char[] temp = new char[str.length()];
     for (int i = 0; i < str.length(); i++) {
         temp[i] = str.charAt(str.length() - (i + 1));
     }
     return new String(temp);
}

祝你好运!

于 2013-12-03T00:36:21.740 回答