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