我在这里遇到了一些问题。我试图使用递归来反转用户输入的字符串,但我一直收到错误。基本上,应该调用无参数void,递归函数来向后打印字符串。我在第23行只在反向字下得到一个错误,它反映了“RecursionReversal类型中的方法reverse()不适用于参数(String)”。 Eclipse中提供了快速修复,但它们都不是我需要的。我错过了什么吗?
import java.util.Scanner;
public class RecursionReversal
{
public static String origChars;
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Please enter 5 characters:");
origChars= input.nextLine();
reverse();
}
public static void reverse()
{
if(origChars.length() <= 1)
return;
else
reverse(origChars.substring(1) + origChars.charAt(0));
}
}
答案 0 :(得分:2)
向reverse
方法添加一个参数,以对应于方法
public static void reverse(String input)
答案 1 :(得分:1)
你的方法应该采用String
参数;使用static
字段可能会有效但代码味道不好。无论如何,取输入String
中的最后一个字符,然后将其他所有字符串。像,
public static String reverse(String str) {
if (str.length() <= 1)
return str;
else
return Character.toString(str.charAt(str.length() - 1))
+ reverse(str.substring(0, str.length() - 1));
}
如果你必须使用全局,可以使用类似的东西来完成,但是在调用origChars
(没有参数)之前必须更新reverse()
,如
private static String origChars;
public static void reverse() {
if (origChars.length() <= 1)
System.out.print(origChars);
else {
System.out.print(origChars.charAt(origChars.length() - 1));
origChars = origChars.substring(0, origChars.length() - 1);
reverse();
}
}
答案 2 :(得分:0)
您没有为反向函数定义参数或返回类型。要使用递归,我建议用
替换反向方法public static String reverse(String s)
{
if(s.length() <= 1)
return s;
else
reverse(s.substring(1) + s.charAt(0));
}
您对reverse(s.substring(1) + s.charAt(0));
语句有正确的想法但是您需要返回类型,否则您无法获得结果。其次,如果没有参数,该方法无法知道String
的哪一部分要反转。
最后,为了使其有效,请从main
致电origichars = reverse(origChars);
,而不是致电reverse();
。
答案 3 :(得分:0)
这是使用无参数void函数执行此操作的方法。 reverse()
取消第一个char
,调用reverse()
,然后将char
放回origChars
的末尾。
public static void reverse()
{
if(origChars.length() <= 1)
return;
char first = origChars.charAt(0);
origChars = origChars.substring(1);
reverse();
origChars+=first;
}
答案 4 :(得分:0)
试试这个:
public String reverseUsingRecursion(String str){
if(str.length() == 0 || str.length() == 1){
return str;
}
String reverseString = reverseUsingRecursion(str.substring(1))
+ str.charAt(0);
return reverseString;
}