当我尝试在java中运行下面的二进制搜索代码时,它抛出ArrayoutofException。有谁能看一下并告诉我哪里出了问题吗?

当我尝试在java中运行下面的二进制搜索代码时,它抛出ArrayoutofException。有谁能看一下并告诉我哪里出了问题吗?,java,indexoutofboundsexception,binary-search,Java,Indexoutofboundsexception,Binary Search,当我试图搜索超出给定输入数组范围的元素时,它抛出错误ArrayIndexOutOfBound 下面是代码片段: import java.util.*; public class Binary { int binSearch(int arr[], int target) { int low=0; int high= arr.length; while(low<=high) { int m

当我试图搜索超出给定输入数组范围的元素时,它抛出错误
ArrayIndexOutOfBound

下面是代码片段:

import java.util.*;

public class Binary {
    int binSearch(int arr[], int target)
    {
        int low=0;
        int high= arr.length;
        while(low<=high)
        {
            int mid = (low+high)/2;              
            if(arr[mid] == target)
                return mid;             
            if(target>arr[mid])
                low=mid+1;              
            else
                high=mid-1;                         
         }          
         return -1;
    }

    public static void main(String arg[])
    {
        Binary b= new Binary();
        int arr[]= {2, 4, 5, 7, 23, 31, 34, 43, 45};            
        int ans=b.binSearch(arr, 46);           
        if(ans==-1)
            System.out.println("The element is not found");         
        else
            System.out.println("Element is found at postion = " + (ans+1));
    }
}
import java.util.*;
公共类二进制文件{
int-bin搜索(int-arr[],int-target)
{
int低=0;
int high=阵列长度;
while(低arr[mid])
低=中+1;
其他的
高=中-1;
}          
返回-1;
}
公共静态void main(字符串arg[])
{
二进制b=新二进制();
int arr[]={2,4,5,7,23,31,34,43,45};
int ans=b.binSearch(arr,46);
如果(ans==-1)
System.out.println(“未找到元素”);
其他的
System.out.println(“元素位于position=“+(ans+1));
}
}

数组长度是数组中元素的总计数,但由于索引从0开始,因此您可以从数组中访问的最后一个值始终是
长度-1
,在上面的代码中,您正在运行从0到数组长度的循环,我相信这就是问题所在

所以试试类似的方法

int binSearch(int arr[], int target)
{
    int low=0;
    int high= arr.length -1; //Correct condition

    while(low<=high)   //Correct condition
    {
        int mid = (low+high)/2;

        if(arr[mid] == target)
            return mid;

        if(target>arr[mid])
            low=mid+1;

        else{
            high=mid-1;
          }

    }

    return -1;
}
int-bin搜索(int-arr[],int-target)
{
int低=0;
int high=arr.length-1;//条件正确
while(低arr[mid])
低=中+1;
否则{
高=中-1;
}
}
返回-1;
}

希望对您有所帮助。

数组长度是数组中元素的总数,但是由于索引从0开始,所以您可以从数组中访问的最后一个值始终是
长度-1
,在上面的代码中,您正在运行从0到数组长度的循环,我相信这就是问题所在

所以试试类似的方法

int binSearch(int arr[], int target)
{
    int low=0;
    int high= arr.length -1; //Correct condition

    while(low<=high)   //Correct condition
    {
        int mid = (low+high)/2;

        if(arr[mid] == target)
            return mid;

        if(target>arr[mid])
            low=mid+1;

        else{
            high=mid-1;
          }

    }

    return -1;
}
int-bin搜索(int-arr[],int-target)
{
int低=0;
int high=arr.length-1;//条件正确
while(低arr[mid])
低=中+1;
否则{
高=中-1;
}
}
返回-1;
}

希望它能帮助您将
设置为高于最大数组索引的
高。
将初始值设置为允许的最大索引,如
长度-1
,如下所示:

int binSearch(int arr[], int target)
{
    int low=0;
    int high= arr.length-1;

    while(low<=high)
    {
        int mid = (low+high)/2;

        if(arr[mid] == target)
            return mid;

        if(target>arr[mid])
            low=mid+1;

        else{
            high=mid-1;
            }

    }

    return -1;
}
int-bin搜索(int-arr[],int-target)
{
int低=0;
int高=arr.length-1;
while(低arr[mid])
低=中+1;
否则{
高=中-1;
}
}
返回-1;
}

您的
设置高于最大数组索引。
将初始值设置为允许的最大索引,如
长度-1
,如下所示:

int binSearch(int arr[], int target)
{
    int low=0;
    int high= arr.length-1;

    while(low<=high)
    {
        int mid = (low+high)/2;

        if(arr[mid] == target)
            return mid;

        if(target>arr[mid])
            low=mid+1;

        else{
            high=mid-1;
            }

    }

    return -1;
}
int-bin搜索(int-arr[],int-target)
{
int低=0;
int高=arr.length-1;
while(低arr[mid])
低=中+1;
否则{
高=中-1;
}
}
返回-1;
}

谢谢,收到我的错误消息很高兴听到它对您有所帮助,请花点时间将答案标记为正确(单击问题旁边的勾号)。谢谢。请你也投票支持我的问题,因为我被禁止再问更多的问题。谢谢谢谢,听到我的错误很高兴听到它帮助了你,请花点时间将答案标记为正确(单击问题旁边的勾号)。谢谢。请你也投票支持我的问题,因为我被禁止再问更多的问题。谢谢好极了有空时,请将答案标记为已接受。祝你圣诞快乐。当然。谢谢+1.你能不能也把我的问题投上一票,因为我不能再问更多的问题了。太好了。有空时,请将答案标记为已接受。祝你圣诞快乐。当然。谢谢+1.请你也把我的问题投上一票,因为我不能再问更多的问题了。