Ошибка в новичке Бинарный поиск - PullRequest
0 голосов
/ 26 января 2019

Показывает результат, когда в массиве присутствует значение поиска (SV).Но нет, если его там нет.Он продолжает запрашивать ввод и продолжает цикл.

Я впервые пытаюсь создать код для бинарного поиска

import java.util.Scanner;

public class Binary_search {

    public static void main() {
        Scanner input = new Scanner(System.in);
        int start = 0;
        int end = arr.length;

        //I used flag to end the loop 
        int Flag = 0;
        int mid = 0;
        int SV = input.nextInt();

        //here I enter values in the array
        for (int x = 0; x <= 4; x++) {
            arr[x] = input.nextInt();
        }

        //here I start a loop for the search 
        while (Flag == 0) {
            mid = (start + end) / 2;

            if (mid == SV) {
                System.out.println("Number Found" + arr[mid]);
                Flag = Flag + 1;
            } else if (mid > SV) {
                end = mid - 1;
            } else if (mid < SV) {
                start = mid + 1;
            }

            //this was the second possibility if the number was not present   
            else if (start == end) {
                Flag = Flag + 1;
                System.out.println("Number not found");
            }
        }
    }
}

Если SV присутствует в массиве, он покажет, какая позицияон находится в «Найденном числе» + обр.Но если его там нет, он должен вывести «Number not found», однако этого не происходит, и он продолжает запрашивать ввод.

1 Ответ

0 голосов
/ 26 января 2019

Вы можете создать простой способ, как это.Пожалуйста, сравните и проверьте, где вам нужно исправить.

public class Test {

    public static void main(String[] args) {
        int arr[] = { 10, 20, 30, 40, 50 };
        int key = 3;
        binarySearchExample(arr, key);
    }

    public static void binarySearchExample(int arr[], int key) {
        int first = 0;
        int last = arr.length - 1;
        int mid = (first + last) / 2;
        while (first <= last) {
            if (arr[mid] < key) {
                first = mid + 1;
            } else if (arr[mid] == key) {
                System.out.println("Element is found at index: " + mid);
                break;
            } else {
                last = mid - 1;
            }
            mid = (first + last) / 2;
        }
        if (first > last) {
            System.out.println("Element is not found!");
        }
    }

}
...