Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将新值添加到现有数组的开头_Java_Arrays - Fatal编程技术网

Java 将新值添加到现有数组的开头

Java 将新值添加到现有数组的开头,java,arrays,Java,Arrays,我想要一个向数组添加值的方法,从数组的开头开始(如果数组为空)或添加到结尾(如果它有值) 如果我运行以下命令: List1.add(task1); List1.add(task2); 我得到以下输出: => null => null => null => null => null Task "TaskOne" Task "TaskTwo" 但是,我希望得到以下输出: Task 1 Task 2 所以,问题是——如何让事情以我上面描述的方式运作 注意:我不能使

我想要一个向数组添加值的方法,从数组的开头开始(如果数组为空)或添加到结尾(如果它有值)

如果我运行以下命令:

List1.add(task1);
List1.add(task2);
我得到以下输出:

=> null
=> null 
=> null
=> null
=> null
Task "TaskOne"
Task "TaskTwo"
但是,我希望得到以下输出:

Task 1
Task 2
所以,问题是——如何让事情以我上面描述的方式运作


注意:我不能使用
java.lang.util.List
ArrayList
检查第一个索引是否为空,如果是,覆盖第一个索引,如果不是,覆盖下一个空索引

在增加数组大小之前,应该检查所有索引是否都是非空的。您的
列表
类应该有一个
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;
        }
    }
}

试试这个。将数组也传递到方法中

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;
 } 

如果需要,您只需要增加阵列。检查是否有任何引用已经为null,如果是,则添加它,否则将其增长1,然后将其添加到末尾

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;
    }
}
公共作废添加(任务){
布尔加法=假;
对于(int i=0;i
您正在声明一个
任务[5]
数组,这意味着您在声明时有5个对任务的空引用。你的逻辑是将所有这些引用复制到一个新的
任务[6]
数组中,因为你说的是长度+1,然后将新任务添加到末尾。我想“我不能使用列表”是因为这是某种研究项目,你不被允许?(这是重新实现标准库中已经存在的东西的唯一有效理由)你说得对,研究项目。@Jonny Henly Maaan,我真的爱你。非常感谢你,你是最棒的。我希望我能自己写,但我会尽我最大的努力从头到尾理解它,并复制它,因为对你们来说,我有一些工作要做。真的,谢谢还不够,我以为我永远都不知道怎么解决它,但你是我的救星!祝你们一切顺利。很高兴我能提供帮助。我非常感谢,不幸的是,我不允许向add函数添加新参数。老鼠。。。按照@Orin2005的答案去做,它看起来很可靠!=>null=>null=>null=>null=>null=>null任务“TaskTwo”这就是我得到的。
java.lang.Object@106d69c
java.lang.Object@52e922
null
null
null
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;
 } 
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;
    }
}