为了账号安全,请及时绑定邮箱和手机立即绑定

进行二分查找时出现 java.lang.ArrayIndexOutOfBoundsException

进行二分查找时出现 java.lang.ArrayIndexOutOfBoundsException

德玛西亚99 2022-01-06 17:24:59
我遇到了一个小问题,我真的不知道为什么。我正在尝试编程以使用二进制搜索方法搜索用户输入的数字。当搜索数组中间的数字时它运行良好,但是当我尝试搜索任何其他数字时出现错误。这是我的代码。import java.util.Scanner;public class Main {    public static void main(String args[])    {        //declaring array        int array[] = {12,23,34,45,56,67,78,89};        //declaring variables        int search = 0;        Scanner input = new Scanner(System.in);        System.out.print("\n Enter: ");        search = input.nextInt();        binarySearch(array, search);    }//end of main    static public void binarySearch(int[] array, int search)    {        int begin = 0;        int end = array.length-1;        int mid = 0;        boolean found = false;        while(!found)        {            mid = (begin + end)/2;            if(array[mid] == search)            {                found = true;                search = array[mid];            }            else if(array[mid] < search)            {                begin = array[mid+1];            }            else if(array[mid] > search)            {                end = array[mid-1];            }        }//end of while loop        //if(!found)            //return ("BOOHOO your search was not found");        System.out.print("Yippee i found "+ search + " at index " + mid);    }}//end of class
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

当您没有找到搜索时,您需要重置指向索引的指针begin和end指针,而不是这些索引上的值,即


while(!found)

{

    mid = (begin + end)/2;


    if(array[mid] == search)

    {

        found = true;

    }

    else if(array[mid] < search)

    {

        begin = mid+1;

    }

    else if(array[mid] > search)

    {

        end = mid-1;

    }


}//end of while loop


查看完整回答
反对 回复 2022-01-06
  • 1 回答
  • 0 关注
  • 197 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号