Алгоритм разделяй и властвуй - результат NullPointerException - PullRequest
0 голосов
/ 08 января 2019

Я делаю программу, которая использует методы разделяй и властвуй. К сожалению, я не могу использовать метод find(...). Я не знаю, что делать вместо нуля в этой строке: find(null, 0, 100, 34). Заранее спасибо.

public class Main {
    static int find (double T[], int left, int right, double numToSearch) {
        if (left <= right) {
            int middle = (left + right) / 2;
            if (T[middle] == numToSearch) {
                return middle;
            }
            if (T[middle] < numToSearch) {
                return find(T, middle+1, right, numToSearch);
            }
            return find(T, left, middle-1, numToSearch);
        }
        return -1;      
    }

    public static void main(String[] args) {
        System.out.println(find(null /* (OR WHAT HERE TO MAKE IT WORK) */, 0, 100, 34));
    }

1 Ответ

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

Вы должны предоставить массив, double[]. Кроме того, необходимо вызвать метод find(...), используя этот массив в качестве первого параметра и допустимый третий параметр (`right`` не должен превышать максимальный индекс массива) .

См. Этот код, который в основном представляет собой ваш код плюс примерный массив, правильный вызов метода find и некоторые (надеюсь полезные) комментарии в методе main:

public class Main {

    static int find(double T[], int left, int right, double numToSearch) {
        if (left <= right) {
            int middle = (left + right) / 2;
            if (T[middle] == numToSearch) {
                return middle;
            }
            if (T[middle] < numToSearch) {
                return find(T, middle + 1, right, numToSearch);
            }
            return find(T, left, middle - 1, numToSearch);
        }
        return -1;
    }

    public static void main(String[] args) {
        // create an array that you can use for searching a number, here it is 34 at index 8
        double[] array = {1, 2, 3, 4, 5, 6, 7, 30, 34, 44, 45, 66, 67, 71, 72, 73, 77, 85, 89, 90, 99};
        // use the find-method with a valid maximum index (right) and the array defined before
        System.out.println(find(array, 0, array.length - 1, 34));
    }

}

Результат всего 8, так что, возможно, добавьте немного дополнительной информации к выводу, например так:

public static void main(String[] args) {
    // create an array that you can use for searching a number, here it is 34 at index 8
    double[] array = {1, 2, 3, 4, 5, 6, 7, 30, 34, 44, 45, 66, 67, 71, 72, 73, 77, 85, 89, 90, 99};
    double numberToFind = 34;
    // use the find-method with a valid maximum index (right) and the array defined before
    System.out.println("The number " + numberToFind + " is at index " + find(array, 0, array.length - 1, 34));
}
...