java - 当我尝试在 java 中运行下面的二分搜索代码时,它会抛出 ArrayOutOfExcepetion。任何人都可以看一下并告诉我哪里出了问题吗?

标签 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 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));
    }
}

最佳答案

数组长度是数组中元素的总数,但由于索引从 0 开始,因此您可以从数组访问的最后一个值始终是 length - 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;
}

希望对你有帮助

关于java - 当我尝试在 java 中运行下面的二分搜索代码时,它会抛出 ArrayOutOfExcepetion。任何人都可以看一下并告诉我哪里出了问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460529/

相关文章:

java - 如何在构造函数之前初始化BufferedImage?

c++ - 我想要一个递归函数来使用二进制搜索检查数组的顺序

java - 为什么 java Arrays.binarySearch 在未找到时返回 (-(insertion point) - 1)

java - Android 开发初学者指南 [第 5 章] 中的 NullPointerException

java - 递归查找排序数组中第一次出现的数字

java - 在 Vaadin 8 中找不到 IndexedContainer

java - 异常 ArrayIndexOutOfBoundsException : 0>=0 while retrieving a value from JTable

java - 回文java程序的数组索引越界异常

java - 有一个 java.lang.ArrayIndexOutOfBoundsException : -1 error. 递归填充

javascript - 为什么这种二分搜索实现会使浏览器无响应?