2015-12-14 18 views
3

想我做的陣列,設置值如下:的Java:刪除某一個項目的所有實例的數組

double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0}; 

如何從數組中刪除所有的0.0的,剩下的只有10.0和3.0和數組長度縮短爲2?

本網站上的其他問題涉及HashSetsCollections。有沒有導入其他東西的方法?

+0

只需要創建一個新的數組,迭代的舊陣列和推動項目需要到新的數組 – yelliver

+0

除非你想利用System.arraycopy'的'廣泛.. 。導入*任何東西*否則會讓你更簡單。 – Makoto

+0

@Makoto是的,但我相信用戶Yelliver的方法似乎是可行的 –

回答

7

下面是使用可以完成這項工作流的一個班輪:

exampleArray = Arrays.stream(exampleArray).filter(d -> d != 0.0).toArray(); 
2

這僅僅是使用int數據類型的例子。它可以根據您的需要進行更改。

說明: j是由從建立一個新的數組的不含非零索引和複製所有非零索引到新數組用於尺寸newArray計數器變量。我們這樣做是因爲數組長度在java中是不可變的。因此,在嘗試調整數組大小時,必須創建一個新數組並進行復制。這是在需要大小可變性時使用其他數據結構的好處。

int j = 0; 
for(int i=0; i<array.length; i++){ 
    if (array[i] != 0) 
     array[j++] = array[i]; 
} 
int [] newArray = new int[j]; 
System.arraycopy(array, 0, newArray, 0, j); 
+0

你應該解釋這段代碼在做什麼。另外,解釋你爲什麼使用'int []'而不是'double []'。 – Makoto

0

希望這段代碼能幫助你。這是最基本的(不是最好的)做法:

double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0}; 
double numberToErase = 0.0; //This could be a parameter 
int newArraySize = 0; 

//Get the fixed size of the new Array 
for (double n : exampleArray) { 
    if (n != numberToErase) { 
     newArraySize++; 
    } 
} 

//Create the new array 
double[] newArray = new double[newArraySize]; 
int newArrayCurrentIndex = 0; 
for (double n : exampleArray) { 
    if (n != numberToErase) { 
     newArray[newArrayCurrentIndex++] = n; 
    } 
} 

//Check the result 
for (double n : newArray) { 
    System.out.println("Number: " + n); 
} 
相關問題