2016-06-11 101 views
0

如下我必須解決一個問題:如何創建一個Array不知道長度將有

創建一個返回只包含的另一個int[] a

正值陣列的方法

我有點兒寫這個方法解決了這個問題:

public static int[] soloPositivi(int[] a) { 
    int[] pos = new int[a.length]; 
    int j=0; 

    for (int i=0; i<a.length; i++){ 
     if (a[i]>0) { 
      pos[j] = a[i]; 
      j++; 
     } 
    } 
    return pos; 
} 
當然

當我測試使用,例如:

int[] a = new int[] {2,-3,0,7,11}; 

我得到[2,7,11,0,0],因爲我設置:

int[] pos = new int[a.length]; 

的問題是,如何獲取POS機陣列具有模塊化的長度,以便我能得到[2,7,11],而不必使用列表?我必須通過使用數組方法來解決這個問題。

+0

不使用數組並使用列表? – 2016-06-11 09:38:55

+0

這個問題只能通過使用數組和他們的方法解決......如果我可以使用列表,我會完成它 – Daniele

+0

使用'ArrayList'來添加有效的值,然後使用'toArray()'方法來'返回一個數組。 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html –

回答

3

首先,循環並計算正數元素的數量以知道長度,然後再循環來複制。

public static int[] copyPositiveVals(int[] arr) { 
    int count = 0; 
    for(int x : arr) { 
     if (x > 0) count++; 
    } 

    int[] arr2 = new int[count]; 
    int i = 0; 
    for(int x : arr) { 
     if (x > 0) { 
      arr2[i] = x; 
      i++; 
     } 
    } 
    return arr2; 
} 
+0

這應該解決它,我沒有考慮使用兩個循環。謝謝 – Daniele

+0

我認爲使用'Java 8'的給定問題要容易得多: int [] arr = new int [] {2,-3,0,7,11};' 'int [] newArr = Arrays .stream(arr).filter(x - > x> 0).toArray();' –

+0

@KevinWallis我相信你也是一個很好的方法,但我對Java很陌生,我正在尋找一個moe初學者友好的方法 – Daniele

相關問題