Java 使用递归返回字符串的倒数?

Java 使用递归返回字符串的倒数?,java,recursion,Java,Recursion,我试图使用递归返回字符串的倒数,但出现了一些错误。我不熟悉递归,所以我真的不知道从哪里开始。我得到的错误是: Exception in thread "main" java.lang.NullPointerException at java.lang.String.concat(String.java:2027) at Recursion.reverseString(Recursion.java:30) at Recursion.reverseString(Recursion.java:

我试图使用递归返回字符串的倒数,但出现了一些错误。我不熟悉递归,所以我真的不知道从哪里开始。我得到的错误是:

Exception in thread "main" java.lang.NullPointerException 

at java.lang.String.concat(String.java:2027)

at Recursion.reverseString(Recursion.java:30)

at Recursion.reverseString(Recursion.java:30)

at Recursion.reverseString(Recursion.java:30)

at Recursion.reverseString(Recursion.java:30)

at Recursion.reverseString(Recursion.java:30)

at Recursion.main(Recursion.java:46)
这是我的密码:

    public static String reverseString (String inString) {
        String result = "";

        if (inString.length() > 0) { 
            // if the string is empty 
            result = inString.charAt(inString.length()-1) + "";
            result.concat(reverseString(inString.substring(0, inString.length()-1)));           
            return result;
        } else {
            return null;        
        }
    }


    // the testers      

    public static void main(String[] args){
        String inString = "abcde";

        // test the reverseString 
        String revString = reverseString(inString);
        System.out.println(revString);
    }
}

异常stacktrace告诉您,
null
正在传递给
concat()
方法。
concat()
的参数是
reverseString()
方法,该方法在字符串为空时返回
null
。您可以返回空字符串以避免出现
NullPointerException
,而不是返回
null
。更换线路:

return null;


异常stacktrace告诉您,
null
正在传递给
concat()
方法。
concat()
的参数是
reverseString()
方法,该方法在字符串为空时返回
null
。您可以返回空字符串以避免出现
NullPointerException
,而不是返回
null
。更换线路:

return null;


除了@asah所说的之外,您还需要指定此表达式 result.concat(反向限制(inString.substring(0,inString.length()-1))

添加到结果变量,使其成为:

result = result.concat(reverseString(inString.substring(0, inString.length()-1)));

否则它将不起作用,因为String类的concat方法不会返回调用它的同一个对象。

除了@asah所说的之外,您还需要分配这个表达式 result.concat(反向限制(inString.substring(0,inString.length()-1))

添加到结果变量,使其成为:

result = result.concat(reverseString(inString.substring(0, inString.length()-1)));

否则它将无法工作,因为String类的concat方法不会返回调用它的对象。

result。concat(null)
抛出NPE。那么,
reverseString(…)
是否会返回null?如果字符串为空,则为空。所以你需要返回一些不同的东西。空的非空字符串的反方向是什么?
reverseString()
中的
returnnull
似乎是将
null
引用引入递归的一个很好的选择。我看不出它在任何情况下都有什么意义。
result.concat(null)
抛出NPE。那么,
reverseString(…)
是否会返回null?如果字符串为空,则为空。所以你需要返回一些不同的东西。空的非空字符串的反方向是什么?
reverseString()
中的
returnnull
似乎是将
null
引用引入递归的一个很好的选择。我不明白这在任何情况下都有什么意义。谢谢@不客气。如果我的答案对您有帮助,请单击答案左侧的复选标记,将其标记为正确。谢谢@不客气。如果我的答案对你有帮助,请点击答案左边的复选标记,将其标记为正确。答对了。我错过了那个+1@Asaph谢谢:)接得好。我错过了那个+1@Asaph谢谢:)