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

How do I retrieve an element in an array list and compare it?

我创建了一个递归二进制搜索方法,它接受 4 个字段,数组、第一个元素、最后一个元素和 searchLastName。在第二个 if 语句中,我试图获取数组中间的元素并将其与 searchLastName 进行比较。然后在 else if 语句中,我试图比较它们并检查 compareTo 方法 returns 是零还是正数。我在使用 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);
}

Edit - 正如 cricket_007 在其中一条评论中指出的那样,请尝试评估 Math.floor((last-first)/2)不松动精度。