2 回答
TA贡献2016条经验 获得超9个赞
您将for-each循环视为常规循环,
for(int i : array){
if(array[i] % 2 == 1)
应该
for(int i :array){
if(i % 2 == 1)
但是,我实际上会将其分解为几种方法以使其更易于推理。从计算几率的方法开始。喜欢,
private static int countOdds(int[] array) {
int count = 0;
for (int val : array) {
if (val % 2 != 0) {
count++;
}
}
return count;
}
在 Java 8+ 中,也可以这样做
private static int countOdds(int[] array) {
return (int) Arrays.stream(array).filter(i -> i % 2 != 0).count();
}
然后,一种将奇数复制到新(临时数组)的方法,例如
private static int[] copyOdds(int[] array) {
int pos = 0;
int[] odds = new int[countOdds(array)];
for (int val : array) {
if (val % 2 != 0) {
odds[pos++] = val;
}
}
return odds;
}
或者,在 Java 8+ 中,
private static int[] copyOdds(int[] array) {
return Arrays.stream(array).filter(i -> i % 2 != 0).toArray();
}
然后你的sortArray方法实际上是自己写的。首先,复制奇数值。然后对它们进行排序。然后将它们复制回原始数组。喜欢,
public static void sortOdds(int[] array) {
int[] odds = copyOdds(array);
Arrays.sort(odds);
int pos = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 != 0) {
array[i] = odds[pos++];
}
}
}
并且,为了演示,一种main方法
public static void main(String[] args) {
int[] array = { 5, 3, 2, 8, 1, 4 };
System.out.println(Arrays.toString(array));
sortOdds(array);
System.out.println(Arrays.toString(array));
}
哪些输出
[5, 3, 2, 8, 1, 4]
[1, 3, 2, 8, 5, 4]
添加回答
举报