【问题标题】:Creating a list of assignments for a school project, but I'm getting a NullPointerException为学校项目创建作业列表,但我收到 NullPointerException
【发布时间】:2020-02-09 20:56:44
【问题描述】:

我不确定之前是否已经回答过这个问题,因为我没有在“类似问题”下看到它,但这里是……对于学校项目,我们必须创建一个 Assignments 的双向链接列表当我创建 addAssignment(Assignment a) 函数时,我得到了 NullPointerException。

在我们的项目中,Assignments 包含一个 String 代表作业的名称,ints 代表获得的分数和给出的分数,double 代表百分比等级和char 表示给定的字母等级。 Nodes 包含一个名为“assignment”的Assignment 以及“next”和“prev”Node 引用。 DList(我们的双向链表)在开头由 Node 的“头”和“尾”组成。

有问题的代码包含在下面。我已经包含了 cmets,详细说明了我的控制台在哪里给了我错误消息。

在课堂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
    }
}

【问题讨论】:

  • 您在 Node 类中遇到问题,因为您试图调用不存在的对象上的方法。我认为您忘记在该类中创建分配对象。

标签: java eclipse doubly-linked-list


【解决方案1】:

不幸的是,我们没有完整的代码,但我怀疑,在您的类 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;
}

【讨论】:

  • 谢谢!你的建议奏效了。另一方面,您的评论让我很好奇,为什么 Java 不会自动实例化这样的值?
  • @gomalley411 因为它不是为此而设计的(如果不需要新实例怎么办?例如从其他地方获取一些实例,或者创建的实例取决于某些条件)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多