2013-12-10 108 views
3

我正在練習什麼是非常基本的java數組練習,而且我很難繞過如何將一個元素插入到數組的開頭,然後將其餘元素移到右側。因此,如果數組沒有超過它的最大尺寸,在數組前面插入一個z,j,a,v,a會使z,j,a,v,a。添加元素以開始數組。

我知道如何與數組列表做到這一點,我只是有困難的時候得到邏輯與陣列正確。這是我到目前爲止有:

public void addFront(char ch) 
{ 
    for(int i = 1; i < data.length-1; i++){ 
    char temp = data[i - 1]; 
    data[i] = temp; 
    } 
    data[0] = ch; 

} 

好像我需要一個臨時變量,但我不會在這種情況下正確地使用它。任何輸入將不勝感激!

+0

爲什麼不'ArrayList'? – nhgrif

+0

我知道這將如何與ArrayLists一起工作,但我正在練習數組並試圖圍繞如何與數組一起工作來圍繞我的大腦。 – user3029486

+1

@nhgrif爲什麼不是'Array'? –

回答

2

讓我們來看看你的當前循環在做什麼。它將位置i - 1中的字符複製到當前位置。但下一個循環會將其從(當前)i複製到(當前)i + 1。它只會將第一個字符複製到數組中除最後一個位置之外的每個位置。

您必須通過陣列向後遍歷,這樣一個轉變不小心使用前一移位的結果。

開始在指數data.length - 1,並從i - 1位置複製到位置i,確保最後一次迭代時i1

此外,不需要臨時變量。您可以直接複製的價值,即

data[i] = data[i - 1]; 
1

開始在陣列的後端。

如果移動元素0到1元,那麼,元件1到2元......嗯,你已經複製元素0到元素1 ....所以,現在你只複製元素0整個陣列上。

開始在陣列轉移一切的權利,你做完這些後,接着的後端,在前面插入新的元素。

public void addFront(char ch) { 
    for(int i = data.length-1; i > 0; --i) { 
     data[i] = data[i-1]; 
    } 
    data[0] = ch; 
} 
0

你並不需要一個臨時變量插入,因爲這說明應該工作...

public void addFront(char ch) 
{ 
    for(int i = data.length - 1; i > 0; i--){ // start at the end. 
    data[i] = data[i-1]; // move every element up 1... that is set the current 
          // element to the prior element. 
    } 
    for (int i = data.length - 1; i >= 0; i--) { 
    if (data[i] == null) { // find the first blank... 
     data[i] = ch; // set the initial value. 
     break; 
    } 
    } 
} 
+0

爲什麼我們遍歷整個數組兩次? – nhgrif

+0

@nhgrif我不知道我們是從0開始的...這個問題有點含糊......顯然這裏假定數據是一個'Character []'。 –

+0

這很好,如果你想這樣做。我仍然不明白爲什麼我們要重複兩遍?爲什麼不在第一次'for'循環中首次遇到null(移動後)數據[i] = ch;'? – nhgrif