我一直在从事Java夏季任务,并且在Java中以递归方式实现indexOf方法存在问题。以下是我到目前为止的情况:
public int rIndexOf(char ch, int fromPos)
{
int charPos = fromPos;
if (charPos >= myString.length() || myString.equals(""))
return -1;
else if (myString.charAt(charPos) == ch)
return charPos;
else
return charPos + rIndexOf(ch, charPos + 1);
}
我似乎得到完全错误的值,所以我只能想象它是增量或计数的问题,但是我的代码每次都不会将charPos增加+1吗?或者它与字符的ASCII值有关吗?
此外,我想知道是否有必要使用“charPos = fromPos”这一行。我可以在整个代码中使用fromPos,还是会违反“传递参考而非价值”的事情?
答案 0 :(得分:6)
你可以绝对在代码中一直使用fromPos
。 Java从未通过引用传递,并且您甚至都没有更改charPos
的值。
目前还不清楚为什么你的最终返回语句将 charPos
添加到递归调用的返回值。为什么不呢:
return rIndexOf(ch, charPos + 1);
?毕竟,假设它在第3位找到它 - 那将返回3,所以你不想在前一次调用中将3添加到3,然后在5中加1,最后以6 ...
答案 1 :(得分:3)
这一行:
return charPos + rIndexOf(ch, charPos + 1);
有缺陷。假设myString是“太阳”,你打电话给rIndexOf(' ', 0);
然后你最终得到:
0 + 1 + 2 + 3
而不是3.因为charPos每次都会增加并将其添加到自身。您应该将该行更改为:
return rIndexOf(ch, charPos + 1);
答案 2 :(得分:2)
你的最后一行是错的,试试这个?
return rIndexOf(ch, charPos + 1)
另外,这将在内存中创建一个巨大的堆栈,效率不高。