在数组中插入数字

时间:2013-02-27 17:34:42

标签: java arrays loops

如何在数组中间添加一个数字(73),然后将所有数字从中间向上移动一个,这样就不会覆盖任何数字。这是我的代码到目前为止73应该进入中间,它之后的数字应该全部移动。不能使用ARRAYLIST。

int midpoint = length/2;
array[midpoint] = 73;

for (int i = midpoint; i<length; i++){
    aNums[i+1] = array[i];
    System.out.print(array[i] + " ");
}

displayArray1(array,length);

3 个答案:

答案 0 :(得分:1)

使用List,或更具体地说ArrayList

ArrayList<Integer> list = new ArrayList<>();

// ... put stuff in list

int midpoint = list.size()/2;
list.add(midpoint, 73);

答案 1 :(得分:1)

您无法添加到数组。首先必须创建一个更大的数组。

int[] newArray = new int[array.length + 1];

然后你必须复制数组的前半部分

for(int i = 0; i < midpoint; i++) {
    newArray[i] = array[i];
}

然后将新的中点放入

newArray[midpoint] = 73;

然后复制另一半

for(int i = midpoint + 1; i < array.length; i++) {
    newArray[i+1] = array[i];
}

然后newArray有了新的中点。

从技术上讲,最后三个步骤可以按任何顺序完成,但按顺序执行它们更具可读性。现在你可以调用你的显示方法,或者用你想做的任何事情。

有一个名为arrayCopy的实用程序方法可以帮助移动数组元素。您可能会或可能不会被允许使用它。它的参数有点冗长,但比运行时的典型for循环要快一些,因为它利用了本机代码。

int[] newArray = new int[array.length + 1];
System.arrayCopy(array,0,newArray,0,midpoint);
newArray[midpoint] = 73;
System.arrayCopy(array,midpoint,newArray,midpoint+1,array.length - midpoint);

为解释这些调用,arraycopy使用:

System.arrayCopy(arrayFrom, 
                 startPosInArrayFrom, 
                 arrayTo, 
                 startPosInArrayTo, 
                 numElementsToCopy);

答案 2 :(得分:0)

你使用数组会给自己带来更多麻烦。

使用ArrayList,它由数组

支持
ArrayList l = new ArrayList();

//...fill contents
int index = l.size()/2;
l.add(index, 72);