Java 二元搜索

Java 二元搜索,java,binary-search,Java,Binary Search,我使用二进制搜索在数组中查找一个对象。 它起作用了。但是,如果数组只有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

我使用二进制搜索在数组中查找一个对象。 它起作用了。但是,如果数组只有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;
}
public int-isSongExist(字符串songName){
int低=0;
int high=this.songs.length-1;
int mid;
while(低0){
高=中-1;
}否则{
中途返回;
}
}
返回-1;
}

您的问题不在您发布的代码中。下面是它的一个简化版本,演示了它的正确性

public int find(int[] a, int f) {
    int low = 0;
    int high = a.length - 1;
    int mid;

    while (low <= high) {
        mid = (low + high) / 2;

        if (a[mid] < f) {
            low = mid + 1;
        } else if (a[mid] > f) {
            high = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

public void test(String[] args) {

    int[][] tests = {{1, 2, 3}, {1, 2}, {1}, {}};
    for (int[] t : tests) {
        System.out.println(Arrays.toString(t));
        System.out.println("1 --> " + find(t, 1));
        System.out.println("2 --> " + find(t, 2));
        System.out.println("3 --> " + find(t, 3));
    }
}
public int-find(int[]a,int-f){
int低=0;
int高=a.长度-1;
int mid;
while(低f){
高=中-1;
}否则{
中途返回;
}
}
返回-1;
}
公共无效测试(字符串[]args){
int[][]测试={{1,2,3},{1,2},{1},{};
for(int[]t:测试){
System.out.println(Arrays.toString(t));
System.out.println(“1-->”+find(t,1));
System.out.println(“2-->”+find(t,2));
System.out.println(“3-->”+find(t,3));
}
}

因此,很可能是您的歌曲列表排序不正确,或者是其他内容出错。我建议您使用调试工具来确认您的假设。

我对这个问题投了否决票,因为没有证据表明对此代码执行了任何调试。请您的问题向我们展示您的调试发现了什么,以及关于特定代码行的特定问题。请参阅:您不能使用array.binarySearch()方法之一吗?如何在数组中存储歌曲名?按长度的降序排列?不,我不能使用数组类。这些歌曲按名字排序,就像电话号码簿一样。