Мой двоичный поиск, чтобы увидеть, находится ли целое число в массиве, зацикливается навсегда, кто-нибудь знает почему? (в Java) - PullRequest
0 голосов
/ 09 июля 2020

Мой двоичный поиск, чтобы увидеть, есть ли целое число в массиве, зацикливается вечно, кто-нибудь знает, почему это может происходить? Кстати, я впервые использую бинарный поиск.

Мой Java код здесь:

import java.util.Scanner;

public class testBeforeLearning {
        private int[] array;
        private int target;

        public testBeforeLearning(int[] array, int target){
            this.array = array;
        }

        private int low;
        private int high;
        private int mid;

        public Boolean actualSearch(){
            low = 0;
            high = array.length - 1;

            while (target != array[mid]){
                mid = (low + high)/2;

                if (target == array[mid]){
                    return true;
                }

                else if(target > array[mid]){
                    low = mid + 1;
                }
                else if (target < array[mid]){
                    high = mid - 1;
                }
            }
            return false;
        }

        public static void main(String[] args){

            Scanner input = new Scanner(System.in);

            int[] dataSet = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

            System.out.println("Please input a number you want to search for in the array:\n");

            int target = input.nextInt();

            testBeforeLearning binarySearch = new testBeforeLearning(dataSet, target);
            System.out.println(binarySearch.actualSearch());

    }
}


По какой-то причине мои нижняя и верхняя границы не кажется, увеличивается или уменьшается, и я не уверен, почему, у кого-нибудь есть идеи, почему?

Спасибо!

1 Ответ

1 голос
/ 09 июля 2020

вы установили условие while как target! = Array [mid]. Но поскольку цель не инициализирована (по умолчанию 0) и 0 не существует в массиве, она будет go навсегда. вы должны установить значение цели в testBeforeLearning. Кстати, вам, вероятно, также следует сделать условие while low <= high. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...