Решаю задачу. Проблема в переменной

С клавиатуры вводится число n - размер массива. Необходимо создать массив указанного размера и заполнить его случайными числами от 0 до 10. Затем вывести содержимое массива в консоль, а также вывести в консоль информацию о: а) Длине массива б) Количестве чисел больше 8 в) Количестве чисел равных 1 г) Количестве четных чисел д) Количестве нечетных чисел е) Сумме всех элементов массива

Написал код, но переменная count суммируется с каждым циклом.

public static void main(String[] args) {
    Scanner scn = new Scanner(System.in);
    System.out.println("Введите размер массива");
    int n = scn.nextInt();
    int[] array = new int[n];
    int count = 0;

    for (int i = 0; i < array.length; i++){
        array[i] = (int) (Math.random() * 10);
        }
    System.out.println("Информация о массиве: " + Arrays.toString(array));
    System.out.println("Длина массива: " + array.length);

    for (int i = 0; i < array.length; i++){
        if (array[i] > 8){
            count++;
        }
        }
    System.out.println("Количество чисел больше 8: " + count);

    for (int i = 0; i < array.length; i++){
        if (array[i] == 1){
            count++;
        }
    }
    System.out.println("Количество чисел равных 1: " + count);

    for (int i = 0; i < array.length; i++){
        if (array[i] % 2 == 0) {
            count++;
        }
    }
    System.out.println("Количество четных чисел: " + count);

    for (int i = 0; i < array.length; i++){
        if (array[i] % 2 != 0) {
            count++;
        }
    }
    System.out.println("Количество нечетных чисел: " + count);

    for (int i = 0; i < array.length; i++){
        count += array[i];
    }
    System.out.println("Сумма всех элементов массива: " + count);
    }

}

Как решить проблему? Вместо одной переменной count создать отдельные переменные для каждого цикла?


Ответы (1 шт):

Автор решения: Дмитрий

Интересно, когда вы писали эту программу, вам не казалось, что вы все время пишите один и тот же код? Про принципы KISS, DRY не приходилось слышать?

public static void main(String[] args) {
    Scanner scn = new Scanner(System.in);
    System.out.println("Введите размер массива");
    int[] array = new Random().ints(scn.nextInt(), 0, 10).toArray();
    System.out.println("Информация о массиве: " + Arrays.toString(array));
    System.out.println("Длина массива: " + array.length);
    System.out.println("Количество чисел больше 8: " + count(array, i -> i > 8));
    System.out.println("Количество чисел равных 1: " + count(array, i -> i == 1));
    System.out.println("Количество четных чисел: " + count(array, i -> i % 2 == 0));
    System.out.println("Количество нечетных чисел: " + count(array, i -> i % 2 != 0));
    System.out.println("Сумма всех элементов массива: " + Arrays.stream(array).sum());
}

private static long count(int[] array, IntPredicate predicate) {
    return Arrays.stream(array).filter(predicate).count();
}
→ Ссылка