我写了一个递归代码,但我不知道它为什么不能工作。(我改变了以前的一些错误,但它仍然没有工作:()
问题是:
编写一个递归方法
一个。打印字符串的每个字符反转两次 湾doubleReverse(" hello")打印oolllleehh
我到目前为止的代码如下:
public class Recursion{
public static void main(String[] args) {
String s = "hello";
doubleReverse(s);
}
public static void doubleReverse(String s) {
if (s == null || s.equals("")){
return;
}
System.out.print(s.charAt(s.length()-1) + s.charAt(s.length()-1) + doubleReverse(s.substring(1)));
}
}
预期输出doubleReverse("hello")
打印oolllleehh
我得到的输出是:不会编译
错误讯息:
发现了2个错误:File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java [line: 12]
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: reference to print is ambiguous, both method print(char[]) in java.io.PrintStream and method print(java.lang.String) in java.io.PrintStream match
File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java [line: 12]
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: 'void' type not allowed here
答案 0 :(得分:4)
您不需要返回任何内容,但每次都需要传递较小版本的字符串,直到您打印完所有字符为止。这是一个实现......
public static void recurse(String str){
if(str.length() > 0) {
System.out.print(str.charAt(str.length()-1));
System.out.print(str.charAt(str.length()-1));
recurse(str.substring(0, str.length() - 1));
}
}
答案 1 :(得分:0)
您的程序有错误,因为void方法返回一个对象" null":
public static void doubleReverse(String s) { // <-- void method.
if (s == null || s.equals("")) {
return; // <-- return object "null".
}
}
在这种情况下,您不需要递归。
public class Solution {
public static String reverseWords(String sentence) {
String[] parts = sentence.split("");
StringBuilder builder = new StringBuilder();
builder.append(parts[parts.length - 1]).append(parts[parts.length - 1]);
for (int i = parts.length - 2; i >= 0; --i) {
builder.append("").append(parts[i]).append(parts[i]);
}
return builder.toString();
}
public static void main(String[] args) {
System.out.println(reverseWords("hello"));
}
}
// Result:
// oolllleehh
如果您想使用复活
public class Solution {
public static String reverse(String str) {
String reverse = "";
if (str.length() == 1) {
return (str + str);
} else {
reverse += str.charAt(str.length() - 1);
reverse += str.charAt(str.length() - 1) + reverse(str.substring(0, str.length() - 1));
return reverse;
}
}
public static void main(String[] args) {
System.out.println(reverse("hello"));
}
}
// Result:
// oolllleehh