我尝试使用递归返回字符串的反向但是我遇到了一些错误。我是递归的新手,所以我不知道从哪里开始。我得到的错误是:
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);
}
}
答案 0 :(得分:3)
异常堆栈跟踪告诉您null
正在传递给concat()
方法。 concat()
的参数是您的reverseString()
方法,当字符串为空时返回null
。您可以返回空字符串以避免null
,而不是返回NullPointerException
。替换行:
return null;
与
return "";
答案 1 :(得分:2)
除了@Asaph所说的你还需要分配这个表达式 result.concat(reverseString(inString.substring(0,inString.length() - 1)));
到您的结果变量,使其变为:
result = result.concat(reverseString(inString.substring(0, inString.length()-1)));
否则它将无法工作,因为String类的concat方法不返回调用它的同一对象