当我运行测试人员课程时,它无法通过第一个字母。它输出一个"!"标记而不是继续打印其余字。无法理解为什么它会一直挂断。递归方法似乎被卡住了,无法继续超过第一个字符。而不是印刷"!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");
}
}
答案 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);
所以最后它只包含!