1

如何将一个数字(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);
4

3 回答 3

1

使用 a List,或更具体地使用 a ArrayList

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

// ... put stuff in list

int midpoint = list.size()/2;
list.add(midpoint, 73);
于 2013-02-27T17:37:54.397 回答
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 有了新的中点。

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

有一种实用方法称为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);
于 2013-02-27T17:38:11.883 回答
0

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

使用由数组支持的 ArrayList

ArrayList l = new ArrayList();

//...fill contents
int index = l.size()/2;
l.add(index, 72);
于 2013-02-27T17:37:52.117 回答