我创建了一个递归二分搜索方法,它接受 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/