我想要一个向数组添加值的方法,从它的开头(如果数组为空)或添加到结尾(如果它有值)。
public void add(Task task) {
Task[] newTaskList = new Task[taskList.length + 1];
for (int i = 0; i < taskList.length; i++) {
newTaskList[i] = taskList[i];
}
newTaskList[newTaskList.length - 1] = task;
taskList = newTaskList;
}
我将我的数组声明为:
Task[] taskList = new Task[5];
如果我运行以下内容:
List1.add(task1);
List1.add(task2);
我得到以下输出:
=> null
=> null
=> null
=> null
=> null
Task "TaskOne"
Task "TaskTwo"
但是,我想要以下输出:
Task 1
Task 2
所以,问题是 - 如何以我上面描述的方式使事情发挥作用。
注意:我无法使用java.lang.util.List
或ArrayList
。
答案 0 :(得分:1)
检查第一个索引是否为null,如果是,则覆盖第一个索引,如果不覆盖下一个空索引。
在增加数组大小之前,应检查所有索引是否为非null。您的List
类应该有一个int
来跟踪基础数组中的非空索引的数量 - 您可以调用此变量size
。
或者您可以使用ArrayList
因为它已经完成了您尝试做的事情,只会更好。为什么重新发明轮子?
<强>更新强>
以下是一些有效的代码:
class List {
static Object taskList[] = new Object[5];
boolean extraSpace = false;
public static void main (String[] args) throws java.lang.Exception {
List list = new List();
list.add(new Object());
list.add(new Object());
for(int i = 0; i < taskList.length; i++) {
System.out.println(taskList[i]);
}
}
// Constructor
public List() {
for(int i = 0; i < taskList.length; i++) {
if(taskList[i] == null) {
extraSpace = true;
break;
}
}
}
public void add(Object task) {
// check for any null indexes, if found fill them
if(extraSpace) {
boolean added = false;
for(int i = 0; i < taskList.length; i++) {
if(taskList[i] == null) {
if(!added) {
taskList[i] = task;
added = true;
} else {
extraSpace = true;
break;
}
}
extraSpace = false;
}
} else {
// if no null indexes then create new array with +1 length, then
// copy old array to new adding new task in the process.
Object[] newTaskList = new Object[taskList.length + 1];
for(int i = 0; i < taskList.length; i++) {
newTaskList[i] = taskList[i];
}
newTaskList[newTaskList.length - 1] = task;
taskList = newTaskList;
}
}
}
输出:
java.lang.Object@106d69c
java.lang.Object@52e922
null
null
null
答案 1 :(得分:0)
试试这个。将数组传递给方法。
public void add(Task task, Task[] taskList){
for(int i = 0; i = taskList.length;i++){
if(taskList[i] == null){
taskList[i] = task;
return;
}
}
Task[] newTaskList = new Task[taskList.length+1];
newTaskList[taskList.length] = task;
taskList = newTaskList;
}
答案 2 :(得分:0)
如果需要,您只需要增长数组。检查是否有任何引用已经为null,如果它们是添加它,否则将它增加一个,然后将其添加到最后。
public void add(Task task) {
boolean added = false;
for(int i = 0; i < taskList.length; i++)
{
if(taskList[i] == null) {
taskList[i] = task;
added = true;
}
}
if(!added) {
//still not added, no null references, add to end of a newly declared array.
Task[] newTaskList = new Task[taskList.length + 1];
newTaskList[newTaskList.length -1] = task;
taskList = newTaskList;
}
}