进行二进制搜索时出现java.lang.ArrayIndexOutOfBoundsException错误?

时间:2018-11-07 00:55:37

标签: java

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

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 个答案:

答案 0 :(得分:3)

找不到搜索内容时,需要将beginend指针重置为索引,而不是这些索引的值,即

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
相关问题