2013-02-27 135 views
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); 
+0

使用集合。 – user 2013-02-27 17:37:12

+0

如果您必须使用固定大小的Java数组(比较Java的几个类似数组的聚合类),那么您需要创建一个比当前数组大一个元素的新数组,并适当复制条目。 – 2013-02-27 17:38:45

+1

至少使用System.arraycopy来移动数组内容。它会自动以升序/降序模式工作,以防止覆盖元素。 – Durandal 2013-02-27 17:39:03

回答

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-loop快一点,因为它利用了本机代码。

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); 
+0

我勉强给你+1的回答他的问题,而不是说“只使用阵列”,即使我不喜欢给那些没有努力的人提供帮助。哈哈 – asteri 2013-02-27 17:39:30

+0

杰夫,你怎么能说他没有努力?他尝试了他的代码,但他失败了。他并不遥远,他只是缺少阵列的一个重要属性:他们有一个固定的长度。显然,他不能使用ArrayList,我会把我的工作放在这是一个大学任务的事实上(因此,一步一步的解释)。 – corsiKa 2013-02-27 17:40:55

+1

*耸耸肩*我想它是作为一个“这是我的代码;修复它”来自他最后一句话的请求/要求。你也许是对的。 – asteri 2013-02-27 17:42:08

0

您正在使用数组造成更多麻烦。

使用ArrayList,这是由数组

ArrayList l = new ArrayList(); 

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

支持使用List,或者更准确地说是ArrayList

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

// ... put stuff in list 

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