Java 使用递归void方法反转字符串

Java 使用递归void方法反转字符串,java,recursion,Java,Recursion,所以我试图写一个方法来反转一个给定的字符串,但问题是它必须是一个void方法,而不是一个return方法,这使得这很困难。我的代码对我来说似乎合乎逻辑,但它不起作用,所以我希望有人能帮助我找出哪里出了问题 public class Reverser { public String text, revText; /** * @param args */ public static void main(String[] args) { Reverser greeting = new

所以我试图写一个方法来反转一个给定的字符串,但问题是它必须是一个void方法,而不是一个return方法,这使得这很困难。我的代码对我来说似乎合乎逻辑,但它不起作用,所以我希望有人能帮助我找出哪里出了问题

public class Reverser {

public String text, revText;

/**
 * @param args
 */
public static void main(String[] args) {
    Reverser greeting = new Reverser("Buildings");
    greeting.reverse();
    System.out.println(greeting.getText());

}

public Reverser(String _text){
    text = _text;
}

public void reverse(){
    int len = text.length();
    if(len >= 1){
        String last = text.substring(text.length() - 1, text.length());
        revText += last;
        text = text.substring(0, text.length() - 1);
        Reverser loop = new Reverser(text);     
        loop.reverse();         
    }
}

public String getText(){

    return revText; 
}

}
这里有一个想法:

public class Reverser {

    private int idx;
    private String text, revText;

    public static void main(String[] args) {
        Reverser greeting = new Reverser("Buildings");
        greeting.reverse();
        System.out.println(greeting.getText());
    }

    public void reverse() {
        if (idx == text.length())
            return;
        revText = text.charAt(idx) + revText;
        idx++;
        reverse();
    }

    public Reverser(String _text) {
        idx = 0;
        text = _text;
        revText = "";
    }

    public String getText() {
        return revText; 
    }

}

与您的答案基本不同的是,我使用索引属性来跟踪我在递归中的确切位置。这样,我就不必修改原始文本属性。

这是一个使用尽可能少的实例变量的版本。不幸的是,您至少需要一个实例变量来保存最终结果(
result
)。否则,状态将传递到每个递归调用中

(PS,这是家庭作业吗?)


由于字符串是不可变的,所以不能在原位对其进行更改。如果唯一的要求是没有返回值,只需打印出最终字符串(或将其放入类变量中)就可以了,那么这对于至少包含一个字符的任何字符串都可以:

public static void main(String args[])
{
    reverse("", "original string");
}

public static void reverse(String reversed, String original)
{
    if(original.length() <= 1)
    {
        System.out.println(original.charAt(0) + reversed);
        // (or set it into a shared variable)
        return;
    }

    reverse(original.charAt(0) + reversed, original.substring(1));
}
publicstaticvoidmain(字符串参数[])
{
反向(“,“原始字符串”);
}
公共静态无效反转(字符串反转,字符串原始)
{

如果(original.length()与奥斯卡·洛佩兹的回答稍有不同,那么

public class Sentence{
    private String sntce, rvrse;
    private int idx;

    public Sentence(String sentence){
        sntce = sentence;
        rvrse = "";
    }

    /**
        A method to reverse a string recursively. 
        @return void. 
    */
    void reverse(){
        if (idx  == sntce.length()){
            sntce = rvrse;
            return;
        }

        rvrse = sntce.charAt(idx) + rvrse;
        idx++;
        reverse();

    }
    /**
        To test reverse gives the appropriate value. 
        @return the value of sntce. 
    */
    public String getText(){
        return sntce;
    }
}
public static void reverse(String original)
{
    if(original.length() < 1) return;

    System.out.print(original.charAt(original.length() - 1));
    reverse(original.substring(0, original.length() - 1));
}
public class Sentence{
    private String sntce, rvrse;
    private int idx;

    public Sentence(String sentence){
        sntce = sentence;
        rvrse = "";
    }

    /**
        A method to reverse a string recursively. 
        @return void. 
    */
    void reverse(){
        if (idx  == sntce.length()){
            sntce = rvrse;
            return;
        }

        rvrse = sntce.charAt(idx) + rvrse;
        idx++;
        reverse();

    }
    /**
        To test reverse gives the appropriate value. 
        @return the value of sntce. 
    */
    public String getText(){
        return sntce;
    }
}