首页 > 解决方案 > 将第一个数组中的偶数复制到另一个数组中

问题描述

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

package allevenproj;

import java.util.*;

public class AllEvenProj {

static int Read(int[] arr) {
    Scanner scan = new Scanner(System.in);
    int count = 0;

    for (int i = 0; i < arr.length; i++) {
        System.out.printf("Enter arr[%d]: ", i);
        arr[i] = scan.nextInt();

        if (arr[i] % 2 == 0) {
            count++;
        }
    }
    System.out.printf("There are %d even numbers\n", count);
    return count;
}

static int[] GetEven(int[] arr, int count) {

    int[] evenArr = new int[count];

    for (int i = 0; i < arr.length; i++) {

        for (int j = 0; j < count; j++) {
            if (arr[i] % 2 == 0) {
                evenArr[j] = arr[i];

            }
        }
    }
    return evenArr;
}

static void Print(int[] arr) {
    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 n = scan.nextInt();
    int[] arr = new int[n];

    int a = Read(arr);
    Print(GetEven(arr, a)); 
}
}

标签: javaarraysfor-loopnested

解决方案


你只得到最后一个值,因为由于方法中的内部 for 循环GetEven:每次你做一个完整的内部循环(你为每个数字做它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;
}

顺便说一句,方法名称应该是小写的。命名约定


推荐阅读