Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这种二进制搜索有什么问题?索引自动边界_Java_Arrays_Algorithm_Binary Search_Arrayindexoutofboundsexception - Fatal编程技术网

Java 这种二进制搜索有什么问题?索引自动边界

Java 这种二进制搜索有什么问题?索引自动边界,java,arrays,algorithm,binary-search,arrayindexoutofboundsexception,Java,Arrays,Algorithm,Binary Search,Arrayindexoutofboundsexception,我试图编写二进制搜索算法,但产生以下错误: Runtime Error: Runtime ErrorException in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 222 out of bounds for length 5 at Solution.binarysearch(GFG.java:44) at GFG.main(GFG.java:22) 到目前为止我写

我试图编写二进制搜索算法,但产生以下错误:

Runtime Error:
Runtime ErrorException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 

  Index 222 out of bounds for length 5

    at Solution.binarysearch(GFG.java:44)
    at GFG.main(GFG.java:22)
到目前为止我写的是

class Solution {
    int binarysearch(int arr[], int n, int k){
        
        if (arr == null) return -1;
        
        int begin = 0;
        int end = k;

            for (; begin < end;)
            {
                int mid = (begin + end) / 2;
                if (arr[mid] == n) return mid;
                if (arr[mid] > n)
                {
                    // in left part
                    begin = begin;  // for debug
                    end = mid; 
                }
                else
                {
                    // in right part
                    begin = mid + 1;
                    end = end; // for debug
                }
            }

            return -1;
    }
}
类解决方案{
int二进制搜索(int arr[],int n,int k){
if(arr==null)返回-1;
int begin=0;
int-end=k;
对于(;开始<结束;)
{
int mid=(开始+结束)/2;
如果(arr[mid]==n)返回mid;
如果(arr[mid]>n)
{
//在左边
begin=begin;//用于调试
结束=中间;
}
其他的
{
//正确的部分
开始=中间+1;
end=end;//用于调试
}
}
返回-1;
}
}
极客 对于 极客问题陈述和示例:

给定大小为N和整数K的排序数组,在 使用二进制搜索,数组中存在哪个K

示例1

输入:N=5 arr[]={1 2 3 4 5}K=4
输出:3
说明:4出现在索引3处


替换
int-end=k
int-end=n-1


k
是你必须找到的数字,
n
是数组大小

为什么不用n代替n-1?因为它是0基的所以什么?如果数组大小是3,那么索引是0,1,2(3-1=2),所以没问题??