【发布时间】:2015-11-24 01:29:52
【问题描述】:
我正在制作一个应用程序,用户在其中键入任务列表,并将该列表保存到数组中。数组中的每个任务都是Assignment 类的一个实例。但是,我意识到在 java 中,创建数组后无法将元素添加到数组中。所以,我所做的是创建了一个名为tasks 的数组,其中包含许多空值:Assignment[]tasks = {null, null, null, null, null, null, null, null, null, null, null, null};。当我想向数组中添加任务时,我只需将下一个空值替换为对象。但是,我还需要一个只有任务的数组,没有空值。所以我为所有不为空的元素创建了一个名为full_tasks 的数组:
for (Assignment task: tasks) {
if (task != null) {
realLength += 1;
}
}
Assignment[] full_tasks = new Assignment[realLength];
for (int i=0; i <= full_tasks.length - 1; i++) {
full_tasks[i] = new Assignment(tasks[i].name, tasks[i].days_due, tasks[i].time);
}
所以现在,full_tasks 数组应该是所有任务的数组,其中没有一个是空的,对吧?但是,当我运行该应用程序时,它无法启动活动,它说是由空指针异常引起的错误:
Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.lb.homeworkappv11.Assignment.name' on a null object reference
at com.example.lb.homeworkappv11.Schedule.sortTasks(Schedule.java:64)
错误指向的行是:
full_tasks[i] = new Assignment(tasks[i].name, tasks[i].days_due, tasks[i].time);
我仍然不完全确定空对象引用是什么,但我认为这意味着full_tasks 数组中的元素之一为空。那会是正确的吗?如果是,我该怎么做才能确保full_tasks 数组仅是tasks 数组中的非空元素?
非常感谢!
编辑:赋值类的构造函数是:
public Assignment(String name, int days, int time) {
this.name = name;
this.days_due = days;
this.time = time;
this.toSortBy = "nothing";
}
【问题讨论】:
-
您在作业中的“名称”变量为空。你能发布你正在使用的构造函数的代码吗?
-
我添加了上面的代码
标签: java android arrays nullpointerexception