gpt4 book ai didi

java - 我的索引越界错误发生在哪里?

转载 作者:行者123 更新时间:2023-12-02 08:38:55 34 4
gpt4 key购买 nike

在编写我的第一个二分搜索方法时遇到问题。

public static int binarySearch(int [] a, int b){
int mid = a[a.length-1]-a[0]/2;
int high = a[a.length-1];
int low = a[0];
int found = -2;

while (high > low){
for (int i = high; i >= mid; i--){
if (a[i] == b){
found = i;
}
}
for (int x = 0; x <= mid; x++){
if (a[x] == b){
found = x;
}
}
if (a[mid] < b){
low = mid;
mid = high-low/2;
} else if (a[mid] > b){
high = mid;
mid = high-low/2;
} else if (a[mid] == b){
found = mid;
}
}
return found;
}

我在运行程序中的调用语句处收到索引越界错误。我已经搞乱了 for 循环有一段时间了,但我什至不确定这就是问题所在。

最佳答案

考虑这种情况:
a = [100, 200, 300, 400, 500]
b = 200

在您的代码中,int mid = a[a.length-1]-a[0]/2; 会将 mid 的值指定为 500 -100/2 = 450

我可以看到,在您前面的代码中的多个位置,您正在使用 a[mid] 这意味着您要求在以下位置获取 a 的元素索引 450。但是,您的数组只有 5 个元素。

基本上,当您应该使用索引时,您正在使用数组中的值。

关于java - 我的索引越界错误发生在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61508607/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com