2016-01-06 114 views
2

下面是我做了什麼,以及它是否工作正常,但我想使陰性和陽性的文章沒有固定的數字,所以代碼可以在任何陣列上運行:的Java:解析陣列正負陣列

int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82}; 
    int[] negative = new int[3]; 
    int[] positive = new int[6]; 
    int n = 0; 
    int p = 0; 

    for(int i=0;i<array.length;i++){ 
     if(array[i]<0){ 
      negative[n] = array[i]; 
      n++; 
     }else{ 
      positive[p] = array[i]; 
      p++; 
     } 
    } 
    System.out.println("Negative array : " + Arrays.toString(negative)); 
    System.out.println("Positive array : " + Arrays.toString(positive)); 

任何意見?

回答

6

您可以按照兩種不同的方式:

  • 計數消極和積極的第一步,產生負面和正面和陣列填充它們
  • 創建List爲正面和負面,填充它們並將它們轉換爲數組

如果不需要有正數組和負數組,也可以將原始數組拆分爲兩個列表(而不是兩個數組)。


首先可能性

int numPositives = 0; 
int numNegatives = 0; 
for(int i=0;i<array.length;i++){ 
    if (array[i] >= 0) { 
     numPositives++; 
    } else { 
     numNegatives++; 
    } 
} 

int[] negative = new int[numNegatives]; 
int[] positive = new int[numPositives]; 
int n = 0; 
int p = 0; 

for(int i=0;i<array.length;i++){ 
    if(array[i]<0){ 
     negative[n] = array[i]; 
     n++; 
    }else{ 
     positive[p] = array[i]; 
     p++; 
    } 
} 

第二種可能性

List<Integer> positivesList = new ArrayList<Integer>(); 
List<Integer> negativesList = new ArrayList<Integer>(); 

for (int i = 0; i < array.length; i++) { 
    if (array[i] >= 0) { 
     positivesList.add(array[i]); 
    } else { 
     negativesList.add(array[i]); 
    } 
} 
int[] positive = positivesList.toArray(new int[positivesList.size()]); 
int[] negative = negativesList.toArray(new int[negativesList.size()]); 
+0

我想有兩個數組,而不是列表。如何生成負數和正數的數組? –

+0

謝謝你們。它像我想要的那樣工作:) –

3

使用List,它沒有固定的大小:

int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82}; 
List<Integer> negative = new ArrayList<>(); 
List<Integer> positive = new ArrayList<>(); 

for(int i = 0;i<array.length;i++){ 
    if(array[i]<0){ 
     negative.add(array[i]); // Add negative number 
    }else{ 
     positive.add(array[i]); // Add positive number 
    } 
} 
1

爪哇8引入了流包括拉姆達謂詞過濾:

int[] pos = Arrays.stream(array).filter((int i) -> i >= 0).toArray(); 
int[] neg = Arrays.stream(array).filter((int i) -> i < 0).toArray(); 
0

這裏有一個不涉及列表的小解決方案,也不需要預先計算負值的數量。這就是使用本地解決方案來複制尚未找到的值。我也改變了它,所以負值和正值都存儲在一個二維數組中。

public static void main(String[] args) { 
    int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82}; 
    int[][] vals = new int[2][0]; 
    for(int i=0;i<array.length;i++){ 
     if(array[i]<0){ 
      int[] buffer = new int[vals[0].length+1]; // create array with one more value 
      System.arraycopy(vals[0], 0, buffer, 0, vals[0].length); // Copy old values 
      buffer[buffer.length-1] = array[i]; // assign new value 
      vals[0] = buffer; // assign old and new values 
     } else { 
      int[] buffer = new int[vals[1].length+1]; // create array with one more value 
      System.arraycopy(vals[1], 0, buffer, 0, vals[1].length); // Copy old values 
      buffer[buffer.length-1] = array[i]; // assign new value 
      vals[1] = buffer; // assign old and new values 
     } 
    } 
    System.out.println("Negative array : " + Arrays.toString(vals[0])); 
    System.out.println("Positive array : " + Arrays.toString(vals[1])); 
} 
0

作爲每@davide兩個方法可以用來

1)計數的陰性和陽性在第一步驟中,產生用於負陣列和陽性和填充它們。

int numPositives = 0;// davide example 
int numNegatives = 0; 
for(int i=0;i<array.length;i++){ 
    if (array[i] >= 0) { 
     numPositives++; 
    } else { 
     numNegatives++; 
    } 
} 

int[] negative = new int[numNegatives]; 
int[] positive = new int[numPositives]; 
int n = 0; 
int p = 0; 

for(int i=0;i<array.length;i++){ 
    if(array[i]<0){ 
     negative[n] = array[i]; 
     n++; 
    }else{ 
     positive[p] = array[i]; 
     p++; 
    } 
} 

2)創建正面和負面清單,填充它們並將它們轉換成數組

int[] array = {15, 22, 71, -27, 33, -44, 0, 334, -82}; 
List<Integer> negativeList = new ArrayList<>(); 
List<Integer> positiveList = new ArrayList<>(); 

for(int i = 0;i<array.length;i++){ 
    if(array[i]<0){ 
     negativeList.add(array[i]); // Add negative number 
    }else{ 
     positiveList.add(array[i]); // Add positive number 
    } 
} 

//由於JAVA 8

int negativeArray[] = negativeList.stream().mapToInt(i->i).toArray(); 
int positiveArray[] = negativeList.stream().mapToInt(i->i).toArray();