我想在2d数组上添加一行

时间:2015-02-04 00:32:34

标签: java arrays

作业中指定的方法说:

boolean addLineSegment(int [] segment) - 如果其坐标代表有效的线段,则将一个线段添加到数据库。这应该将lineSegment数组的大小增加1并将给定的线段添加到结尾。如果添加了线段,则该方法返回true,否则返回false。输入应该是大小为4的数组。

我有点卡住,因为我想在我的数组lineSegments [] []中添加一行,而不必重新分配它并删除数组的先前内容。如何保留数组的内容并向其中添加新行,以便将segment []的内容添加到lineSegments [] []?

2 个答案:

答案 0 :(得分:4)

使用Java ArrayUtils静态方法,有许多功能可以帮助您,例如:

添加功能:

static int[]    add(int[] array, int element) 
          Copies the given array and adds the given element at the end of the new array.
static int[]    add(int[] array, int index, int element) 
          Inserts the specified element at the specified position in the array.

删除功能:

static int[]    remove(int[] array, int index) 
          Removes the element at the specified position from the specified array.

答案 1 :(得分:0)

看起来您正在尝试模拟ArrayList的动作!我建议使用ArrayList来管理您的数组列表。但是,如果您只允许使用阵列,我担心除非您知道外部阵列中有多少最大元素,否则您需要复制ArrayList类的工作方式(稍作修改),这确实涉及重新分配数组。

然而,不要害怕,因为你确实可以重新分配数组而不用丢失它的内容。在Arrays类中,有一个名为copyOf()的静态方法。这允许您在保留旧数组的内容的同时创建所需大小的新数组。

让我们举个例子:

boolean addLineSegment(int[] segment){
    if(segment is not valid)
        return false;

    lineSegments=Arrays.copyOf(lineSegments,lineSegments.length+1);
    lineSegments[lineSegments.length-1]=segment;
    return true;
}

这满足了在保留旧元素的同时将数组大小增加一的要求。为此,数组必须从零开始,然后从那时开始增长。

这与ArrayList类的工作方式不同,虽然每次增加一个,ArrayList类会跟踪最后一个元素的当前索引,并以数组开头长度为10,每次达到上限时加倍。但是,您的要求规定每次大小必须增加1,因此我提出的解决方案应该可以正常工作。