首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从给定数组中选择奇数和偶数,然后将它们存储在另一个数组中?

如何从给定数组中选择奇数和偶数,然后将它们存储在另一个数组中?
EN

Stack Overflow用户
提问于 2021-02-26 13:24:56
回答 4查看 1.3K关注 0票数 3

如何从给定数组中选择奇数和偶数,然后将它们存储在另一个数组中?流程是:奇数将进入odd[]数组,而偶数将传递到even[]数组?

这是我的代码,我不确定这是否正确,因为它在某种程度上存储和打印了零和偶数的混合,没有奇数.

代码语言:javascript
运行
复制
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] + " ");
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-02-26 13:36:42

你可以在一个循环中完成所有这些--这样会快得多。若要知道输入数字的正确位置,请为每个数组添加额外的计数器。

你的方法

代码语言:javascript
运行
复制
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++;
    }
}

但是,这并不是最好的解决方案,因为您(在大多数情况下)无法事先确定oddeven数组的长度。然后,您应该使用数组或计数每一个或其他的值。

更动态的方法

如前所述,首先需要确定数组的大小。

代码语言:javascript
运行
复制
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++;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-02-26 14:32:52

检测oddeven数字的方法是正确的,但我认为您编写的代码的问题是,oddeven数组的长度不是决定因素。因此,对于这个问题,我建议使用ArrayList<Integer>,假设您在函数输入中获得数组,并希望在输出中使用数组(为了更好的性能,我将在输出中混合数组)。但是,分离每个列表提取的函数也是可以的,这取决于您将如何处理它们)。

解决方案

代码语言:javascript
运行
复制
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]));
    }
}

产出:

代码语言:javascript
运行
复制
odd numbers :
[21, 15]
even numbers :
[0, 24, 22, 14, 16, 18]
票数 2
EN

Stack Overflow用户

发布于 2021-02-26 15:14:31

(3行)

代码语言:javascript
运行
复制
int[] nums = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

nums分离奇偶partitioningBy

代码语言:javascript
运行
复制
Map<Boolean, List<Integer>> map = IntStream.of(nums)
        .boxed().collect(partitioningBy(n -> (n & 1) == 0));

…并将偶数和奇数的结果List<Integer>转换为int[]

代码语言:javascript
运行
复制
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));
代码语言:javascript
运行
复制
even numbers: [2, 4, 6, 8, 10, 12, 14, 16]
odd numbers:  [1, 3, 5, 7, 9, 11, 13, 15]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66386631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档