java - 为学校项目创建作业列表,但我收到 NullPointerException
问题描述
我不确定之前是否已经回答过这个问题,因为我没有在类似问题下看到它,但是这里有……对于学校项目,我们必须创建一个Assignment
s 的双向链表,并且当我创建addAssignment(Assignment a)
函数时,我得到了一个 NullPointerException。
在我们的项目中,Assignment
s 由 aString
表示作业的名称,int
s 表示获得的分数和给出的分数,adouble
表示百分比等级,achar
表示给出的字母等级。Node
s 包含一个Assignment
名为“assignment”和“next”和“prev”Node
的引用。A 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
}
}
解决方案
不幸的是,我们没有完整的代码,但我怀疑,在你的类 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;
}
推荐阅读
- javascript - 网页启动时自动填充列表 - React、Redux、Firebase
- javascript - 使用 ajax 从表单中获取选中的复选框值
- python - 输出列名而不是值的 Python 函数
- apache-flink - Apache Flink 超时使用 onTimer 和 processElement
- vue.js - 在另一个数据值中传递 vue 数据值
- excel - 使用 vba 重复过滤任务
- rust - 如何添加一个字段,它是其他字段的加密哈希?
- javascript - 更改数组变量名称
- javascript - KaIOs - Kaiads 频率上限生效。kaios 广告未按时响应
- typescript - 如何正确定义包装 3rd 方类的代理的类型?