将偶数从第一个数组复制到另一个数组

时间:2018-11-05 17:34:25

标签: java arrays for-loop nested

我遇到一个问题,当我尝试显示第一个数组中充满偶数的新数组时,它仅输出最后一个值吗?我看不出问题出在我的GetEven方法内的嵌套for循环内?

Animal

2 个答案:

答案 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());
    }
}