我正在使用二进制搜索来查找数组中的对象。 有用。但是,如果数组只有2个对象,而我想要找到的对象在第2个索引中,我得到-1。
mid = (low + high) / 2;
mid是0,然后如果songName不存在则返回-1
public int isSongExist(String songName) {
int low = 0;
int high = this.songs.length - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (this.songs[mid].getSongName().compareToIgnoreCase(songName) < 0) {
low = mid + 1;
} else if (songs[mid].getSongName().compareToIgnoreCase(songName) > 0) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
答案 0 :(得分:1)
您的问题不在您发布的代码中。这是它的一个简化版本,证明了它的正确性。
groupby
因此,您的歌曲列表可能被错误排序或其他错误。我建议你使用调试工具来确认你的假设。