返回表达式可以只在 java 中一种类型的递归方法的一个点上吗?



>我必须编写一个字符串类型的递归方法来制作特定且非重复字符的字符串。问题是我缺少返回语句错误。方法如下: 有什么想法可以解决吗?

public static String makeString(char[] inputArray, int strLength, String str) {
if (str.length() == strLength) {
return str;
}
int l = inputArray.length;
for (int i = 0; i < l; i++) {
str += inputArray[i];
int k = 0;
char[] copyInput = new char[l - 1];
for (int j = 0; j < l; j++) {
if (j != i) {
copyInput[k] = inputArray[j];
k++;
}
}
makeString(copyInput, strLength, str);
str = str.length() == 1 ? "" : str.substring(0, str.length() - 1)
}
}

每个没有void作为返回类型的方法在每个执行路径上都必须有一个return。递归方法没有特殊处理。所呈现的方法缺少未输入外部if的执行路径的return-语句。

可以通过在方法末尾添加return str;来修复此错误:

public static String makeString(char[] inputArray, int strLength, String str) {
[...]
for (int i = 0; i < l; i++) {
[...]
}
return str;
}

关于您的代码的评论:我们从String文档中知道

。字符串对象是不可变的...

提供的代码不使用递归调用返回的值,并且由于字符串是不可变的,因此递归调用对结果没有任何影响。由于我不完全理解您的算法,因此我只能推测,也许您打算编写str = makeString(copyInput, strLength, str);而不是makeString(copyInput, strLength, str);.

相关内容

最新更新