[英]reverse string recursive method
您好为什么我使用递归的反向方法不起作用? print 语句显示操作已正确完成,但最后似乎只有整个 String 的 ast char 被分配给 h。
public static String reverse(String s,String h){
if(s.length()==0){
return s;
} else {
h+=s.charAt(s.length()-1);
System.out.println(h);//FOR TEST
s=s.substring(0,s.length()-1);
reverse(s,h);
return h;
}
}
有什么建议吗?
利用
return reverse(s,h);
而不是返回 h;
IE:
public static String reverse(String s,String h){
if(s.length() == 0){
return h;
} else {
h+=s.charAt(s.length()-1);
System.out.println(h);//FOR TEST
s=s.substring(0,s.length()-1);
return reverse(s,h); //NOTICE THE CHANGE HERE,
}
}
Java 中的字符串是不可变的。 所以在这段代码中:
private static void foo(String x) {
x += "bar";
}
public static void main() {
String a = "foo";
foo(a);
System.out.println(a);
}
只会打印"foo"
。 它的工作方式与类型为int
相同。
所以你的reverse
function 需要对返回值做一些事情。 当您调用reverse(s,h)
时,您将丢弃递归调用的返回值。 你需要合并它:
String rec = reverse(s,h);
return ... something involving rec ...;
我认为这种方式更适合使用递归方法来反转字符串:
public class Reversestringbyrecursivefunction {
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
while(true)
{
System.out.print("[?] Enter String('q' for exit)> ");
String str=input.next();
if(str.equals("q"))
break;
System.out.println("this string created by reversed recursive function : "+revers(str));
System.out.print("\n==========================\n");
}
System.out.print("\n\n\t\t\t[ GOOD LUCK!!! ]\n");
}
static String revers(String str)
{
if(str.length()<=1)
return str;
else
return revers(str.substring(str.length()-1, str.length()))+revers(str.substring(0, str.length()-1));
}
}
但是,为了获得最佳性能,您应该更改此行:
return revers(str.substring(str.length()-1, str.length()))+revers(str.substring(0, str.length()-1));
至:
return str.substring(str.length()-1)+revers(str.substring(1, str.length()-1)+str.substring(0,1);
在前一行:在最佳性能和一个阶段,您只能交换输入字符串的 1 个字符。 但是,换行:在一个阶段,您可以交换输入字符串的 2 个字符
2件事:
public static String reverse(String s,String h){
if(s.length()==0){
return h; /// This needs to return the reversed string (h).
} else {
h+=s.charAt(s.length()-1);
System.out.println(h);//FOR TEST
s=s.substring(0,s.length()-1);
h = reverse(s,h); /// You need to use the return value
return h;
}
}
看起来您正在尝试使用 return-by-reference-parameter 更改 h 。 您必须记住,在 Java 中,所有内容(包括对对象的引用)都是按值传递的。 一旦你写s=s.substring(0,s.length()-1);
, s
成为对不同String
object 的引用,并且该更改不会传播到调用 function。
此外,还有一种方法可以仅使用一个输入参数来实现这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.