Java 二元搜索
我使用二进制搜索在数组中查找一个对象。 它起作用了。但是,如果数组只有2个对象,而我想找到的对象在第二个索引中,我得到-1Java 二元搜索,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
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()方法之一吗?如何在数组中存储歌曲名?按长度的降序排列?不,我不能使用数组类。这些歌曲按名字排序,就像电话号码簿一样。