2014-10-18 37 views
1

我正在嘗試創建一個程序,該程序將採用可以是任意長度的{2,0,32,0,0,8}整數數組,並使其成爲如此所有的非零數字都在較低索引的左邊,並且所有的零都移動到最後。 例如,{2,0,32,0,0,8}變爲{2,32,8,0,0,0}。 該數組可以是任意長度幷包含任何非負整數。 這是我到目前爲止有:如果零爲零則向左移動

public static int[] moveLeft(final int[] a) { 
    for (int i = 0; i < a.length; i++) { 
     if (a[i] != 0) { 
      for (int j = 0; j < a.length; j++) { 
       if (a[j] == 0) { 
        a[j] = a[i]; 
        a[i] = 0; 
       } 
      } 
     } 
    } 
    return a; 

}

然而,當我這樣做,它不會爲第一和第二個字符的工作。如果我有{1,2,0,1},它將在返回{1,2,1,0}時返回{2,1,1,0}。任何幫助?

+0

我們可以創建一個temp_array並添加一個元素給原始數組,只有它不爲零。對於零,我們可以接受一個整數變量n_zeroes並將其初始化爲0.每當有一個0元素(而不是將它添加到temp_array)時,就遞增它。現在,我們可以在temp_array的後面添加零,n_zeroes次。這temp_array是你想要的。 – nishantbhardwaj2002 2014-10-18 18:52:47

回答

1

你的內循環應該在索引i之前停止。改變這種

for (int j = 0; j < a.length; j++) { 

for (int j = 0; j < i; j++) { 

然後你的代碼爲我工作。