2015-06-29 222 views
3

我需要將矩陣元素放入數組中,然後我需要先排序第一個奇數然後偶數 示例:這是數組:5,9,1,2,3,8, 4.產量:1,3,5,9; 2,4,8將數組拆分爲兩個數組

這是我的代碼:

int[] array=new int[mat.length*mat[0].length]; 
int cnt=0; 

for(int i=0; i<mat.length; i++) 
{ 
    for(int j=0; j<mat[0].length; j++) 
    { 
    array[cnt]=mat[i][j]; 
    cnt++; 
    } 
} 
int cnt1=0; 
int cnt2=0; 
int[] array1=new int[array.length]; 
int[] array2=new int[array.length]; 
for(int i=0; i<array.length; i++) 
{ 
    if(array[i]%2==0) 
    { 
    array1[br1]=array[i]; 
    cnt1++; 
    } 
    else 
    { 
    array2[br2]=array[i]; 
    cnt2++; 
    } 
} 

的問題是單雙號這兩個數組,因爲我不知道自己的長度,如果我把整個數組的大小,那麼我將得到奇數數組中剩餘位置的零,數字是偶數,反之亦然。 你會如何做到這一點? 謝謝

+1

你允許你使用類別? – Alp

+0

是的,但我不知道如何使用集合 – zeus

+1

您可以保持雙循環中偶數元素(或奇數元素,或兩者)的數量的運行計數。注意j中循環的錯字。它應該是'j fresidue

回答

-1

你也可以使用ArrayList,它有一個動態的大小,但有點慢。 這解決了零的問題

0
// This is how you instantiate collections. 
List odds = new ArrayList(); 
List evens = new ArrayList(); 

... 
if(array[i]%2==0) 
    { 
    // Here you add a new item to the collection for even numbers 
    evens.add(array[i]; 
    } 
    else 
    { 
    // Here you add a new item to the collection for odd numbers 
    odds.add(array[i]); 
    } 


... 

// And finally this is how you get arrays out of collections 
int[] oddArray = odds.toArray(new int[]); 
int[] evenArray = evens.toArray(new int[]); 
+0

儘管[unclosed paren](https://xkcd.com/859/),您使用的原始類型是一個主要的罪在泛型世界中。 – Makoto

+0

是的,我犧牲了他們的速度。 – Alp

1

沒有與數組大小的問題,因爲有每個陣列(數組1數組2)持有的所有號碼中有足夠的空間,你知道伯爵( cnt1cnt2)的每個陣列中的元素。循環後因此,你可以只有效元素複製到下面一個新的數組:

int[] even = Arrays.copyOf(array1, cnt1); 
int[] odd = Arrays.copyOf(array2, cnt2); 

Arrays.copyof(..)reference

4

如果你可以使用List你可以做

List<Integer> even = new ArrayList<>(); 
List<Integer> odd = new ArrayList<>(); 

for(int i=0; i<mat.length; i++) { 
    for(int j=0; j<mat[0].length; j++) { 
     if (mat[i][j] % 2 == 0) 
      even.add(mat[i][j]); 
     else 
      odd.add(mat[i][j]); 
    } 
} 

Collections.sort(even); 
Collections.sort(odd); 

odd.addAll(even); 

for (int v: odd){ 
    System.out.println(v); 
} 
1

這裏有幾個Java 8解決方案(它們分別是更直接):

With two p流的驢,它是過濾和排序。

final int[] ints = {5, 9, 1, 2, 3, 8, 4}; 

int[] oddArray = Arrays.stream(ints).filter(x -> x % 2 != 0).sorted().toArray(); 
int[] evenArray = Arrays.stream(ints).filter(x -> x % 2 == 0).sorted().toArray(); 

System.out.println(Arrays.toString(oddArray)); 
System.out.println(Arrays.toString(evenArray)); 

隨着流的一次傳遞,您希望使用集合,以便您不必處理正確的數組大小。不過,你仍然需要對它進行分類。

final int[] ints = {5, 9, 1, 2, 3, 8, 4}; 

List<Integer> oddList = new ArrayList<>(); 
List<Integer> evenList = new ArrayList<>(); 

Arrays.stream(ints).forEach(e -> { 
    if(e % 2 != 0) { 
     oddList.add(e); 
    } else { 
     evenList.add(e); 
    } 
}); 
Collections.sort(oddList); 
Collections.sort(evenList); 

System.out.println(oddList); 
System.out.println(evenList); 
0

謝謝大家

成員@fresidue提醒我這裏面幫我解決這個問題

int cnt=0; 
    int cnt1=0; 
    int cnt2=0; 
    for(int i=0; i<mat.length; i++) 
    { 
     for(int j=0; j<mat[0].length; j++) 
     { 
     array[cnt]=mat[i][j]; 
     cnt++; 
     if(mat[i][j]%2==0) 
      cnt1++; 
     else 
      cnt2++; 
     } 
    } 

    int[] array1=new int[cnt1]; 
    int[] array2=new int[cnt2]; 
相關問題