递归反向Word方法无法通过第一个字母

时间:2015-03-12 04:19:55

标签: java string recursion reverse sentence

当我运行测试人员课程时,它无法通过第一个字母。它输出一个"!"标记而不是继续打印其余字。无法理解为什么它会一直挂断。递归方法似乎被卡住了,无法继续超过第一个字符。而不是印刷"!olleH"我只得到"!"。谢谢!

/**
   Class reverses text of word
*/

public class Sentence
{
    private String text="";



    /**
        Constructs a sentence
        @param word
    */
    public Sentence(String textIN)
    {
        text=textIN;
    }

    /**
        gets text
        @return text
    */
    public String getText()
    {
        return text;
    }

    /**
        Reverse word

    */
    public String reverse()
    {
        if (text.length() <= 1)
        {
            return text;
        }

        else
        {
            char val = text.charAt(0);
            text=text.substring(1);
            return reverse() + val;
        }
    }
}


/**
   A tester class for reversing a sentence.
*/
public class SentenceTester
{
   public static void main(String[] args)
   {
      Sentence greeting = new Sentence("Hello!");
      greeting.reverse();
      System.out.println(greeting.getText());
      System.out.println("Expected: !olleH");
   }
}

3 个答案:

答案 0 :(得分:0)

这是最终的程序(刚刚更改了return语句):

/** Class reverses text of word */

public class Sentence { private String text="";

/** Constructs a sentence @param word */ public Sentence(String textIN) { text=textIN; } /** gets text @return text */ public String getText() { return text; } /** Reverse word */ public String reverse() { if (text.length() <= 1) { return text; } else { char val = text.charAt(0); text=text.substring(1); return (text=reverse() + val); } } }

原因很简单 - String是不可变的。每次你想要它改变再分配回来。

答案 1 :(得分:0)

通过对代码的读取,您的反向方法似乎有效 - 它返回原始文本的反转。但是,它是通过更改text的值来实现的,并且它永远不会将最终值放入text

实际发生的事情是text缩短了一个字符(从正面删除),直到只留下一个字符 - !

因此,您可以在主方法中解决问题:

public static void main(String[] args)
{
    Sentence greeting = new Sentence("Hello!");
    String result = greeting.reverse();
    System.out.println(result);
    System.out.println("Expected: !olleH");
}

答案 2 :(得分:0)

我希望你喜欢这样。仅供参考,您可以使用以下 -

String reversedString = new StringBuilder("Original String").reverse().toString();

还有一件事,如果你传递null,你的代码将无法工作:)

您的代码存在的问题是,您正在修改else块中的文本。

text = text.substring(1);

所以最后它只包含