2013-02-27 55 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);