java - 如何从数组中删除奇值元素?

标签 java arrays

我的目标是编写一个方法来创建删除奇数的数组副本。这是我的代码:

public class Evens {
    static int[] evens(int[] input) {
        final int n = input.length;
        int[] output = new int[n];
        for(int i=0;i<n;i++) {
            if(input[i]%2 == 0)
                output[i] = input[i];
        }
        return output;
    }
    public static void main(String[] args) {
        int[] fvalues = new int[] {4,7,9,3,6,8,2};
        int[] evalues = evens(fvalues);
        for(int i=0;i<evalues.length;i++)
            System.out.println(i+"] "+evalues[i]);
    }
}

当我运行它时,它给我一个数组的元素,其中包含原始数组的所有偶数,但奇数所在的位置为零。我该如何写才能不出现零而奇数消失呢?

最佳答案

要删除元素,最好使用ArrayList,因为数组无法更改其大小。如果您必须使用数组,则输出数组必须比输入短。比如说,如果您要删除三个元素,则 output 的大小必须为 input.length-3

在您的实现中,您实际上并没有删除元素,您只是跳过奇数,并且由于int[]默认初始化为零,以前出现奇数的地方都带有零。

你可以这样做:

  1. 计算偶数元素的数量
  2. 使用上一步中找到的长度创建一个新的输出数组
  3. 仅将偶数复制到输出数组。这有点棘手,因为您需要使用两个索引(但只有一个 for 循环):一个索引用于迭代输入数组,另一个索引用于迭代输出数组 -对于迭代的每一步,输入数组的索引都会像往常一样递增,但输出数组的索引仅在向输出添加新的偶数元素后才会递增。

关于java - 如何从数组中删除奇值元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920336/

相关文章:

java - 以编程方式使用 j_security_check

c - 得到意外的输出

c# - array.Max();对于数组索引而不是值

PHP 键 => 值数组查找上一个和下一个条目

c++ - 此数组中的某些值无特殊原因变为零 (0)

javascript - 比较独立于顺序的对象数组

java - 如何用后退按钮终止 Activity ?

java - Hibernate 无法在继承类上提取 ResultSet

java - 无法写入文件

java - 数组长度不同,Junit 中预期长度 = 1 实际长度 = 0