如何从给定数组中选择奇数和偶数,然后将它们存储在另一个数组中?流程是:奇数将进入odd[]数组,而偶数将传递到even[]数组?
这是我的代码,我不确定这是否正确,因为它在某种程度上存储和打印了零和偶数的混合,没有奇数.
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
int[] odd = new int[10];
int[] even = new int[10];
for (int i = 0; i < num.length; i++) { // For odd numbers
if (num[i] % 2 != 0) {
num[i] = odd[i];
}
System.out.println(num[i] + " ");
}
for (int j = 0; j < num.length; j++) { // For even numbers
if (num[j] % 2 == 0) {
num[j] = even[j];
}
System.out.println(num[j] + " ");
}发布于 2021-02-26 13:36:42
你可以在一个循环中完成所有这些--这样会快得多。若要知道输入数字的正确位置,请为每个数组添加额外的计数器。
你的方法
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
int[] odd = new int[10];
int[] even = new int[10];
int oddPos = 0;
int evenPos = 0;
for (int i = 0; i < num.length; i++) {
if (num[i] % 2 == 0) {
even[evenPos] = num[i];
evenPos++;
} else {
odd[oddPos] = num[i];
oddPos++;
}
}但是,这并不是最好的解决方案,因为您(在大多数情况下)无法事先确定odd和even数组的长度。然后,您应该使用数组或计数每一个或其他的值。
更动态的方法
如前所述,首先需要确定数组的大小。
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
int oddCount = 0, evenCount = 0;
int oddPos = 0, evenPos = 0;
//get the count of each type
for (int i = 0; i < num.length; i++) {
if (num[i] % 2 == 0)
oddCount++;
else
evenCount++;
}
//define arrays in correct sizes
int[] odd = new int[oddCount];
int[] even = new int[evenCount];
//put values in arrays
for (int i = 0; i < num.length; i++) {
if (num[i] % 2 == 0) {
even[evenPos] = num[i];
evenPos++;
} else {
odd[oddPos] = num[i];
oddPos++;
}
}发布于 2021-02-26 14:32:52
检测odd和even数字的方法是正确的,但我认为您编写的代码的问题是,odd和even数组的长度不是决定因素。因此,对于这个问题,我建议使用ArrayList<Integer>,假设您在函数输入中获得数组,并希望在输出中使用数组(为了更好的性能,我将在输出中混合数组)。但是,分离每个列表提取的函数也是可以的,这取决于您将如何处理它们)。
解决方案
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static Integer[][] separateOddnEven(int[] input) {
Integer[][] output = new Integer[2][];
List<Integer> odds = new ArrayList<>();
List<Integer> evens = new ArrayList<>();
for (int i = 0; i < input.length; ++i) {
int temp = input[i];
if (temp % 2 == 0)
evens.add(temp);
else
odds.add(temp);
}
// alternative is to use these Arraylists directly
output[0] = new Integer[odds.size()];
output[1] = new Integer[evens.size()];
output[0] = odds.toArray(output[0]);
output[1] = evens.toArray(output[1]);
return output; // index 0 has odd numbers and index 1 has even numbers.
}
public static void main(String[] args) {
int[] input = {0, 21, 24, 22, 14, 15, 16, 18};
Integer[][] output = separateOddnEven(input);
System.out.println("odd numbers :");
System.out.println(Arrays.toString(output[0]));
System.out.println("even numbers :");
System.out.println(Arrays.toString(output[1]));
}
}产出:
odd numbers :
[21, 15]
even numbers :
[0, 24, 22, 14, 16, 18]发布于 2021-02-26 15:14:31
(3行)
int[] nums = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};用nums分离奇偶partitioningBy
Map<Boolean, List<Integer>> map = IntStream.of(nums)
.boxed().collect(partitioningBy(n -> (n & 1) == 0));…并将偶数和奇数的结果List<Integer>转换为int[]
int[] even = map.get(true).stream().mapToInt(i -> i).toArray();
int[] odd = map.get(false).stream().mapToInt(i -> i).toArray();
System.out.println("even numbers: " + Arrays.toString(even));
System.out.println("odd numbers: " + Arrays.toString(odd));even numbers: [2, 4, 6, 8, 10, 12, 14, 16]
odd numbers: [1, 3, 5, 7, 9, 11, 13, 15]https://stackoverflow.com/questions/66386631
复制相似问题