我的目标是编写一个方法来创建删除奇数的数组副本。这是我的代码:
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[]
默认初始化为零,以前出现奇数的地方都带有零。
你可以这样做:
- 计算偶数元素的数量
- 使用上一步中找到的长度创建一个新的输出数组
- 仅将偶数复制到输出数组。这有点棘手,因为您需要使用两个索引(但只有一个 for 循环):一个索引用于迭代输入数组,另一个索引用于迭代输出数组 -对于迭代的每一步,输入数组的索引都会像往常一样递增,但输出数组的索引仅在向输出添加新的偶数元素后才会递增。
关于java - 如何从数组中删除奇值元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920336/