java - 如何检索数组列表中的元素并进行比较?

标签 java recursion binary-search

我创建了一个递归二分搜索方法,它接受 4 个字段:数组、第一个元素、最后一个元素和 searchLastName。在第二个 if 语句中,我试图获取数组中间的元素并将其与 searchLastName 进行比较。然后在 else if 语句中我尝试比较它们并检查compareTo 方法是否返回零或正数。我在使用 if 和 else if 语句时都遇到问题。

private static int binarySearch(ArrayList<Member> list, int firstElem, int lastElem, String searchLastName)
{
    int middle;

    if( firstElem > lastElem )
        return -1;

    middle = ( firstElem + lastElem ) / 2;

    if( list.get(middle).getLastName.equals(searchLastName) )
        return middle;
    else if( list.get(middle).getLastName.compareTo(searchLastName) >= 0 )
        return binarySearch(list, middle + 1, lastElem, searchLastName);
    else
        return binarySearch(list, firstElem, middle - 1, searchLastName);
}

最佳答案

改变

if( list.get(middle).getLastName.equals(searchLastName) )
        return middle;
else if( list.get(middle).getLastName.compareTo(searchLastName) >= 0 )
        return binarySearch(list, middle + 1, lastElem, searchLastName);
else
        return binarySearch(list, firstElem, middle - 1, searchLastName);
}

if( list.get(middle).getLastName().equals(searchLastName) )
        return middle; //should be ideally a getter for lastName
else if( list.get(middle).getLastName().compareTo(searchLastName) >0 ) //equals already checked, not requied here
        return binarySearch(list, middle + 1, lastElem, searchLastName);
else
        return binarySearch(list, firstElem, middle - 1, searchLastName);
}

编辑 - 正如 cricket_007 在其中一条评论中指出的,尝试评估 Math.floor((last-first)/2) 不失去精度。

关于java - 如何检索数组列表中的元素并进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40696086/

相关文章:

java - 如何更改 Piechart3D 部分的颜色

尝试将输入流复制到输出流时发生 Java IOException

c++ - C++中的递归(生成二进制代码)

c++ - 如何找到小于或等于 X 的最大值和大于或等于 X 的最小值?

java - 使用连续字符键的通用二分搜索失败

java - 如何使用jsp页面和tomcat 8编译运行java文件

java - OkHttp -queuedCallsCount() 和 runningCallsCount() 有什么区别?

C# - 如何使用递归确定两个字符串是否只有一个共同的字母

recursion - 为什么永远的循环不会崩溃?为什么无限递归会崩溃?

java - 二分查找CompareTo Java