将数组拆分为两个数组

时间:2015-06-29 21:59:00

标签: java

我需要将矩阵元素放入数组中,然后我需要先排序第一个奇数,然后排序数 示例:这是数组: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++;
  }
}

问题是奇数和偶数这两个数组,因为我不知道它们的长度,如果我把整个数组的大小,那么我将得到奇数数组中剩余位数的零号均匀,反之亦然。 你会怎么做? 谢谢

6 个答案:

答案 0 :(得分: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 :(得分:1)

阵列大小没有问题,因为每个阵列中有足够的空间( array1 array2 )来保存所有数字并且您知道计数( cnt1 cnt2 )每个数组中的元素。因此,在循环之后,您只能将有效元素复制到新数组,如下所示:

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

Arrays.copyof(..)reference

答案 2 :(得分:1)

以下是一些Java 8解决方案(更直接):

通过两次传递,它是过滤和排序。

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);

答案 3 :(得分: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[]);

答案 4 :(得分: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];

答案 5 :(得分:-1)

您也可以使用ArrayList,它具有动态大小但速度稍慢。 这解决了零的问题