java - 递归线性搜索算法
问题描述
我有一个家庭作业,要创建一个从一个索引到另一个索引的递归线性搜索算法。出于某种原因,以下代码每次都返回 -1。
public static int recLinearSearch(ArrayList<String> pList, String pKey, int pBeginIdx, int pEndIdx) {
if (pBeginIdx > pEndIdx) {
return -1;
} else if (pList.get(pBeginIdx).equals(pKey)) {
return pList.indexOf(pBeginIdx);
}
// Recursive case
else return recLinearSearch(pList, pKey, pBeginIdx + 1, pEndIdx - 1);
}
这就是我所说的:
ArrayList<String> list = new ArrayList<>();
list.add("Jonathan");
list.add("Zier");
System.out.println(list.size()); // returns 2
int idx = Hw3_1.recLinearSearch(list, "Jonathan", 0, list.size() - 1);
System.out.println(idx); //returns -1
解决方案
索引不是列表中的元素,因此pList.indexOf(pBeginIdx)
总是会返回-1
。此外,indexOf
恕我直言,您应该自己实现搜索。您已经正确检查了元素是否等于键 - 您只需要返回它:
public static int recLinearSearch(ArrayList<String> pList, String pKey, int pBeginIdx, int pEndIdx) {
if (pBeginIdx > pEndIdx) {
return -1;
} else if (pList.get(pBeginIdx).equals(pKey)) {
return pBeginIdx; // Here!
}
// Recursive case
else return recLinearSearch(pList, pKey, pBeginIdx + 1, pEndIdx); // Don't alter the end index!
}
推荐阅读
- c++ - unordered_multimap.empty() 返回真,即使我认为它应该返回假?
- c++ - 为什么 do while 循环不会中断?
- postgresql - 将 Debug 配置切换到 Release 会关闭 Devart.Data.PostgreSql 命名空间
- excel - Web 提取代码需要更新,尝试从工作表单元格中添加工作表
- java - Java Swing 表单的 Nullpointerexception
- google-cloud-platform - 部署谷歌云功能需要很长时间
- tsql - 在数据库中搜索选定的表并排列结果?
- flutter - 我如何从颤动的底部创建抽屉标题看起来像这样
- java - 将数组加载到列表中,但它与新内存重复(Java)
- firebase - 未找到合适的运行配置