使用递归反转字符串

时间:2014-11-17 22:49:30

标签: java string recursion input reverse

我在这里遇到了一些问题。我试图使用递归来反转用户输入的字符串,但我一直收到错误。基本上,应该调用无参数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));
    }
}

5 个答案:

答案 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;          
}