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

我遇到了一个小问题,我真的不知道为什么。我正在尝试编程以使用二进制搜索方法搜索用户输入的数字。当搜索数组中间的数字时它运行良好,但是当我尝试搜索任何其他数字时出现错误。这是我的代码。


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



德玛西亚99
浏览 198回答 1
1回答

斯蒂芬大帝

当您没有找到搜索时,您需要重置指向索引的指针begin和end指针,而不是这些索引上的值,即while(!found){&nbsp; &nbsp; mid = (begin + end)/2;&nbsp; &nbsp; if(array[mid] == search)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; found = true;&nbsp; &nbsp; }&nbsp; &nbsp; else if(array[mid] < search)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; begin = mid+1;&nbsp; &nbsp; }&nbsp; &nbsp; else if(array[mid] > search)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; end = mid-1;&nbsp; &nbsp; }}//end of while loop
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java