所以我在这段代码中一直在寻找我的错误10-20分钟,但我仍然找不到任何错误。然而,我发现(在最后添加一个systemout之后)我的“中间”整数有些错误,因为它是<比最低数字(开始)
感谢任何帮助!
以下是代码:
public class BinaereSuche {
public static int intList[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
public static int bineareSuche(int number){
int start = 0;
int end = intList.length -1;
boolean found = false;
while(found == false){
int middle = (end - start) / 2;
if(number > intList[middle]){
start = middle + 1;
}else if(number < intList[middle]){
end = middle - 1;
}else
return middle;
found = true;
System.out.println(intList[start] + " <--> " + intList[end] + " => " + intList[middle]);
} return -1;
}
public static void main(String[] args) {
System.out.println(bineareSuche(32));
}
}
sysout给我32 <--> 512 => 16
-1
,其中32是起始编号,512是结束编号,16是512和32之间的中间编号,这显然是错误的。
P.S。我一直在寻找答案,但仍然无法找到我的问题 - 如果有人对它的工作方式感到好奇(如果你还不知道):Here's a picture
答案 0 :(得分:1)
我认为这一行是错误的:
flex 1 0 auto
尝试:
int middle = (end - start) / 2;
考虑end = 10,start = 9.您的方法将计算mid = 0。