我必须创建一个方法,通过创建一个新数组来复制和打印数组中的偶数。我已经创建了一个名为 myNumbers
的数组。我认为问题在于 myEvenNumbers[z]
不会在 myEvenNumbers[0]
存储偶数,而是会存储第一个索引处的第一个偶数myNumbers
。任何帮助将不胜感激!
这是我到目前为止的代码。
public static void copyAndPrintEvenNumbers() {
System.out.println("All the even numbers are: ");
int count = 0;
for (int i =0; i < myNumbers.length; i++) {
if (myNumbers[i] % 2 == 0) {
count++;
}
int[] myEvenNumbers = new int[count];
for (int z = 0; z < myNumbers.length; z++) {
if (myNumbers[z] % 2 ==0) {
myEvenNumbers[z] = myNumbers[z];
System.out.println(myEvenNumbers[z]);
}
}
}
}
最佳答案
您必须为 myEvenNumbers
数组声明第二个索引。当 z
超过 myEvenNumbers
数组的元素总数时,您将得到 IndexOutOfBounds。也像康纳说的那样,两个循环不应该嵌套。否则,您将丢弃先前的数组实例 (myEvenNumbers
),并导致内存泄漏。
public static void copyAndPrintEvenNumbers() {
System.out.println("All the even numbers are: ");
int count = 0;
for (int i =0; i < myNumbers.length; i++) {
if (myNumbers[i] % 2 == 0) {
count++;
}
}
int[] myEvenNumbers = new int[count];
int myEvenIndex = 0;
for (int z = 0; z < myNumbers.length; z++) {
if (myNumbers[z] % 2 ==0) {
myEvenNumbers[myEvenIndex] = myNumbers[z];
System.out.println(myEvenNumbers[myEvenIndex]);
myEvenIndex++;
}
}
}
<小时/>
我个人会为偶数数组选择相同的大小(对内存来说有一点开销)来消除第一个循环,因为偶数的计数不能超过原始数组的计数。
public static void copyAndPrintEvenNumbers() {
System.out.println("All the even numbers are: ");
int count = 0;
int[] myEvenNumbers = new int[myNumbers.length];
int count = 0;
for (int z = 0; z < myNumbers.length; z++) {
if (myNumbers[z] % 2 ==0) {
myEvenNumbers[count] = myNumbers[z];
System.out.println(myEvenNumbers[count]);
count++;
}
}
System.out.println("There are " + count + " even numbers found");
}
关于java - 如何创建仅包含偶数的数组的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409762/