作业中指定的方法说:
boolean addLineSegment(int [] segment) - 如果其坐标代表有效的线段,则将一个线段添加到数据库。这应该将lineSegment数组的大小增加1并将给定的线段添加到结尾。如果添加了线段,则该方法返回true,否则返回false。输入应该是大小为4的数组。
我有点卡住,因为我想在我的数组lineSegments [] []中添加一行,而不必重新分配它并删除数组的先前内容。如何保留数组的内容并向其中添加新行,以便将segment []的内容添加到lineSegments [] []?
答案 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,因此我提出的解决方案应该可以正常工作。