Исключение нулевого указателя в Difference. <init>(Решение. java: 16) - PullRequest
0 голосов
/ 07 мая 2020
• 1000 в зависимости от ошибки фактический и формальный списки аргументов различаются по длине. почему?
class Difference {
    private int[] elements;
    public int maximumDifference;

    Difference(int[] elementsArray) {
        for (int i = 0; i < elementsArray.length; i++) {
            elements[i] = elementsArray[i];
        }
    }
}

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        sc.close();

        Difference difference = new Difference(a);
    }
}

Я удалил 'void', но теперь получаю исключение с нулевой точкой. Я предполагаю, что массив элементов в классе Difference был создан, однако элементов в нем нет или они могут содержать null. Как я могу решить проблему здесь?

Ошибка выглядит так:

  Exception in thread "main" java.lang.NullPointerException
         at Difference.<init>(Solution.java:16)
         at Solution.main(Solution.java:57)

Ответы [ 2 ]

4 голосов
/ 07 мая 2020

void Difference(int[] elementsArray) не является конструктором. Конструктор не имеет объявленного возвращаемого типа. Вам нужно изменить это, чтобы удалить void:

class Difference {
    private int[] elements;
    public int maximumDifference;

    Difference(int[] elementsArray) {
        for (int i = 0; i < elementsArray.length; i++) {
            elements[i] = elementsArray[i];
        }
    }
}
1 голос
/ 07 мая 2020

Вы не определяете конструктор для своего класса.

Правильное определение конструктора в Java:

Difference(int[] elementsArray) {
    ...
}

Ошибка, которую вы видите, связана с тем, что классы получают один конструктор по умолчанию с нулевыми аргументами. Поскольку вы не определили какой-либо конструктор, компилятор считает, что он должен придерживаться конструктора по умолчанию.

Что касается NullPointerException , которое вы получаете.

private int[] elements

не инициализируется. По умолчанию для переменных-членов класса установлено значение null, если они являются объектами, и значения по умолчанию, если они являются примитивами. В Java массивы считаются объектами, поэтому переменная элементов имеет значение null.

Вот рабочий код:

Difference(int[] elementsArray) {
    elements = new int[elementsArray.length];
    for (int i = 0; i < elementsArray.length; i++) {
        elements[i] = elementsArray[i];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...