gpt4 book ai didi

java - 为什么这种搜索算法奇怪地不适用于这种情况?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:12 24 4
gpt4 key购买 nike

我对 Java 有点陌生,我正在学习递归的概念。我正在创建一个递归算法,该算法使用 compareTo 方法检查某个元素是否存在于 Comparable 数组中。尽管该算法在大多数情况下都有效,但出于某种原因,它似乎在后半部分找不到元素。例如数组为{3, 5, 1, 9, 11},在3, 5, 1上调用方法成功返回true,但在9, 11上调用方法返回false。附上代码,如有帮助将不胜感激!

  @SuppressWarnings ("unchecked")
public boolean searchItem (Comparable[] arr, Comparable searchValue)
{
if (arr.length == 1 && arr[0].compareTo (searchValue) == 0)
return true;
else if (arr.length == 1)
return false;
return arr[0].compareTo (searchValue) == 0 || searchItem (Arrays.copyOfRange (arr, 1, arr.length - 1), searchValue);
}

最佳答案

copyOfRange 的第三个参数是不包括元素的 copyTo 索引 - 即,不复制 copyTo 索引处的元素。所以你需要 arr.length 而不是 arr.length - 1

https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOfRange(boolean[],%20int,%20int)

from - the initial index of the range to be copied, **inclusive**
to - the final index of the range to be copied, **exclusive**.
(This index may lie outside the array.)

所以你需要 searchItem (Arrays.copyOfRange (arr, 1, arr.length), searchValue)

这是一个更简单的递归程序

if(arr.length == 0)
return false;

if(arr[0].compareTo(searchValue) == 0)
return true;

return searchItem(Arrays.copyOfRange(arr, 1, arr.length), searchValue);

关于java - 为什么这种搜索算法奇怪地不适用于这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com