我遇到一个问题,当我尝试显示第一个数组中充满偶数的新数组时,它仅输出最后一个值吗?我看不出问题出在我的GetEven方法内的嵌套for循环内?
Animal
答案 0 :(得分:0)
由于GetEven
方法中的内部for循环,您只得到最后一个值:每次执行完整的内部循环(对arr
中的每个数字都执行一次)重写整个evenArr
。
因此,解决方法是删除内部循环:
static int[] getEven(int[] arr, int count) {
int[] evenArr = new int[count];
int j = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
evenArr[j++] = arr[i];
}
}
return evenArr;
}
顺便说一句,方法名称应小写。 Naming conventions
答案 1 :(得分:0)
正如鲁本所说,问题出在您的循环中。我冒昧地重构了您的代码,只是为了向您展示解决该问题的更好方法
package allevenproj;
import java.util.*;
public class AllEvenProj {
static int[] read(int size) {
Scanner scan = new Scanner(System.in);
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
System.out.printf("Enter arr[%d]: ", i);
arr[i] = scan.nextInt();
}
return arr;
}
static void print(int[] arr) {
System.out.printf("There are %d even numbers\n", arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter size of array: ");
int size = scan.nextInt();
print(Arrays.stream(read(size)).filter(x -> x % 2 == 0).toArray());
}
}