错误代码如下:(死循环)
public static void main(String[] args)
{
int arr[] = {1, 2, 4, 5, 6};
int refen = refen(arr, 3);
System.out.println(refen);
}
private static int refen(int arr[], int value)
{
int i = 0, j = arr.length;
int mid = 0;
while(i <= j)
{
mid = (i + j) >>> 1;
if(value < arr[mid])
{
j = mid;
}else if(arr[mid] < value)
{
i = mid + 1;
}else
{
return mid;
}
}
return -1;
}
条件:
- 循环条件 i ≤ j
- 查找数值 不存在
满足上面条件就会产生死循环
步骤分析:
arr[mid] = 4 > value = 3,所以j = mid;
然后 mid = (0 + 2) / 2 = 1
arr[mid] = 2 < value = 3,所以i = mid + 1;
然后 mid = (2 + 2) / 2 = 2
下面就成了死循环了,因为 mid = (i + j) / 2的值不会继续改变了
mid = (2 + 2) / 2 = 2
mid = (2 + 2) / 2 = 2
mid = (2 + 2) / 2 = 2
…