将第一个数组中的偶数复制到另一个数组中

我有一个问题,当我尝试显示第一个数组中充满偶数的新数组时,它似乎只输出最后一个值?我在 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)); 

}

}



HUH函数
浏览 268回答 2
2回答

翻过高山走不出你

正如鲁本所说,问题出在你的循环中。我冒昧地重构您的代码只是为了向您展示解决问题的更好方法package allevenproj;import java.util.*;public class AllEvenProj {&nbsp; &nbsp; static int[] read(int size) {&nbsp; &nbsp; &nbsp; &nbsp; Scanner scan = new Scanner(System.in);&nbsp; &nbsp; &nbsp; &nbsp; int[] arr = new int[size];&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < size; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.printf("Enter arr[%d]: ", i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr[i] = scan.nextInt();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return arr;&nbsp; &nbsp; }&nbsp; &nbsp; static void print(int[] arr) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.printf("There are %d even numbers\n", arr.length);&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(arr[i]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String args[]) {&nbsp; &nbsp; &nbsp; &nbsp; Scanner scan = new Scanner(System.in);&nbsp; &nbsp; &nbsp; &nbsp; System.out.print("Enter size of array: ");&nbsp; &nbsp; &nbsp; &nbsp; int size = scan.nextInt();&nbsp; &nbsp; &nbsp; &nbsp; print(Arrays.stream(read(size)).filter(x -> x % 2 == 0).toArray());&nbsp; &nbsp; }}

海绵宝宝撒

您只得到最后一个值,因为由于方法中的内部 for 循环GetEven:每次执行完整的内部循环(对 中的每个数字都执行此操作arr)时,您将整个evenArr.所以修复是删除内循环:static int[] getEven(int[] arr, int count) {&nbsp; &nbsp; int[] evenArr = new int[count];&nbsp; &nbsp; int j = 0;&nbsp; &nbsp; for (int i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; if (arr[i] % 2 == 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; evenArr[j++] = arr[i];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return evenArr;}顺便说一下,方法名称应该是小写的。命名约定
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java