我需要将矩阵元素放入数组中,然后我需要先排序第一个奇数,然后排序数 示例:这是数组: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++;
}
}
问题是奇数和偶数这两个数组,因为我不知道它们的长度,如果我把整个数组的大小,那么我将得到奇数数组中剩余位数的零号均匀,反之亦然。 你会怎么做? 谢谢
答案 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,它具有动态大小但速度稍慢。 这解决了零的问题