Создание списка заданий для школьного проекта, но я получаю исключение NullPointerException - PullRequest
0 голосов
/ 09 февраля 2020

Я не уверен, был ли дан ответ на этот вопрос ранее, поскольку я не видел его в разделе Похожие вопросы, но здесь идет речь ... Для школьного проекта мы должны создать двусвязный список из Assignment s. и когда я сделал свою функцию addAssignment(Assignment a), я получил исключение NullPointerException.

В нашем проекте Assignment s состоит из String для имени назначения, int s для числа заработанные баллы и количество выданных баллов, double для оценки в процентах и ​​char для данной оценки. Node s содержат Assignment, называемые ссылками "assignment" и "next" и "prev" Node. DList (наш двусвязный список) состоит из "головы" и "хвоста" Node в начале.

Данный код включен ниже. Я включил комментарии, подробно описывающие, где моя консоль выдала мне сообщения об ошибках.

В классе Assignment:

/**
 * setter
 * @param n = the name of the assignment
 */
public void setName(String n) {
    name = n;
}

В классе Node:

/**
 * default constructor
 */
public Node() {
    assignment.setName("");
    assignment.setEarnedPts(0);
    assignment.setTotalPts(0);
    next = prev = null;
}

/**
 * n-argument constructor
 * @param a = assignment
 * @param e = # of earned points
 * @param t = # of total possible points
 * @param n = "next" node
 * @param p = "previous" node
 */
public Node(String name, int e, int t, Node n, Node p) {
    assignment.setName(name); // got an error here
    assignment.setEarnedPts(e);
    assignment.setTotalPts(t);
    assignment.setGrade();
    next = n;
    prev = p;
}

Наконец, в классе DList:

/**
 * adds an assignment to the list
 * @param a = the assignment
 */
public void addAssignment(Assignment a) {
    // check to see if this is the first node in the list
    Node temp = new Node(a.getName(), a.getEarnedPts(), a.getTotalPts(), tail, head); // got an error here
    if (head == tail) {
        head = temp;
    }
    else { // there are other node(s) in the list
        Node p = head;
        Node q = new Node();
        while (p.getNext() != null) {
            q = p; // set q equal to p, so that q will equal previous node
            p = p.getNext(); // advance p by one node
        }
        p.setNext(temp);
        p.setPrev(q); // ??? ask about this in class later
    }
}

1 Ответ

0 голосов
/ 10 февраля 2020

К сожалению, у нас нет всего кода, но я подозреваю, что в вашем классе Node у вас есть поле вроде этого:

class Node{
    Assignment assignment;

Если это так, то это ваша проблема: вы не сделали инициализируйте любое значение переменной присваивания, и поэтому оно равно Null. Java не инициализируется по умолчанию, как, например, в C ++. Вам придется сделать это самостоятельно, конструкторы для класса Node будут выглядеть так:

public Node() {
    assignment = new Assignment();
    assignment.setName("");
    assignment.setEarnedPts(0);
    assignment.setTotalPts(0);
    next = prev = null;
}

public Node(String name, int e, int t, Node n, Node p) {
    assignment = new Assignment();
    assignment.setName(name); // got an error here
    assignment.setEarnedPts(e);
    assignment.setTotalPts(t);
    assignment.setGrade();
    next = n;
    prev = p;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...