为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-12-30 20:42:39
我有一个问题,当我尝试显示第一个数组中充满偶数的新数组时,它似乎只输出最后一个值?我在 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)); }}
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

正如鲁本所说,问题出在你的循环中。我冒昧地重构您的代码只是为了向您展示解决问题的更好方法


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());

    }

}


查看完整回答
反对 回复 2021-12-30
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您只得到最后一个值,因为由于方法中的内部 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;

}

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


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信