Дублировать четное число из первого массива в другой массив - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблема, когда кажется, что когда я пытаюсь отобразить мой новый массив, полный четных чисел из первого массива, он выводит только последнее значение? Я не вижу, где проблема заключается во вложенном цикле for внутри моего метода GetEven?

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 ]

0 голосов
/ 05 ноября 2018

Как сказал Рубен, проблема в вашем цикле. Я позволил себе немного изменить свой код, чтобы показать вам лучший подход к проблеме

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());
    }
}
0 голосов
/ 05 ноября 2018

Вы получаете только последнее значение, потому что из-за внутреннего цикла 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;
}

Кстати, имя метода должно быть строчным. Соглашения об именах

...