Выведите процент четных чисел и выведите четные числа в массиве

Я недавно изучаю массивы, и я застрял на этом вопросе.

В основном я должен попросить пользователя ввести числа, которые войдут в массив, и должен распечатать процент четных чисел и должен напечатать все четные числа в следующем формате.

Even values are : 89,22,-8, 0

Мой код это

import java.util.*;

public class Change {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("How many numbers in the array?");
        int num = input.nextInt();
        int count=0;
        int count1=0;

        for (int i=1; i<=num; i++) {

            System.out.println("Enter an integer: ");
            count++;
            int integer= input.nextInt();
            if (integer%2==0) {

                int list[]=new int[integer];
                count1++;
            }
        }

        System.out.println("There were "+((double)count1/count)*100+" percent of even numbers.");
        System.out.println("Even values are "+Arrays.toString(list)+"");

    }
}

Этот код заканчивается сообщением об ошибке, в котором говорится, что «список» не инициализирован.

Я знаю, что, поскольку «список» находится внутри цикла for, система не понимает, что он был инициализирован, но я понятия не имею, как заставить систему распознать «список».

Любая помощь или комментарии приветствуются. :)

Вы объявляете list внутри цикла, так что это только внутри цикла. Переместите замедление за пределы цикла

GBlodgett 20.02.2019 00:08

Да, но затем он говорит, что не может распознать «целое число», потому что целое число также находится внутри цикла. Я хочу ввести «целое число» внутри массива, поэтому я не могу его вынуть. :(

user547075 20.02.2019 00:10

Рассмотрите возможность использования отступов, чтобы сделать ваш код более читабельным.

khelwood 20.02.2019 00:16

"поэтому я не могу его вытащить" - да, вы можете. Объявление int[] list; и присвоение значения list = new int[integer]; не обязательно должны происходить вместе. Однако это оставит вас с существующими проблемами: (1) вы переназначаете значение list каждый раз в цикле и ничего не накапливаете от одного цикла к другому, и (2) вы никогда ничего не добавляете в список. Если я догадываюсь об ошибке в вашем мышлении, она касается значения new int[integer]. Это выделяет массив «целого» размера с неопределенным содержимым; он не помещает «целое число» в массив.

user10762593 20.02.2019 00:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
package com.inlet.ifserver;

import java.util.*;

public class x {
    public static void main(String[] args) {


        Scanner input = new Scanner(System.in);

        System.out.println("How many numbers in the array?");
        int num = input.nextInt();
        int count1 = 0;

        Integer[] evens = new Integer[num];

        for (int i = 0; i < num; i++) {

            System.out.println("Enter an integer: ");
            int integer = input.nextInt();
            if (integer % 2 == 0)
                evens[count1++] = integer;

        }

        evens = Arrays.copyOfRange(evens, 0, count1);

        System.out.println("There were " + ((double) count1 / num) * 100 + " percent of even numbers.");
        System.out.println("Even values are " + Arrays.toString(evens) + "");


    }
}

Можно ли не использовать что-то вроде List<integer> ? Я новичок и понятия не имею, что это такое.. Большое спасибо за вашу помощь.

user547075 20.02.2019 00:18

Конечно. Проблема с использованием массива заключается в том, что вы заранее не знаете, насколько большим будет список четных значений, а размер массивов нельзя изменить. Списки — это то, что вы используете, когда не знаете, сколько предметов у вас будет. Затем вы можете превратить этот список в массив в конце.

CryptoFool 20.02.2019 00:21

почему бы не использовать список?

CryptoFool 20.02.2019 00:22

Я не знаю, что это.. :)

user547075 20.02.2019 00:25

Поищи это. Вы должны знать о типах List и Map, если собираетесь хорошо разбираться в Java. Обычно вы создаете ArrayList и HashMap.

CryptoFool 20.02.2019 00:27

Просто задание не позволяет мне использовать что-то кроме того, что я выучил :(

user547075 20.02.2019 00:29

Хорошо, я переработал свой ответ, используя только массивы. Это усекает исходный массив четов, как только он узнает, сколько у вас четов.

CryptoFool 20.02.2019 00:35

FWIW, count не используется (в оригинале он был излишним)

user10762593 20.02.2019 00:40

Хорошо, давайте сначала разобьем проблему на несколько небольших частей и решим их одну за другой. Во-первых, нам нужно создать и инициализировать наш массив пользовательским вводом. Сначала нам нужно указать размер нашего массива — это вы сделали.

        Scanner input = new Scanner(System.in);

        System.out.println("How many numbers in the array?");
        int num = input.nextInt();
        int evenCount = 0;
        int[] list = new int[num]; //set array size to user input

Далее нам нужно заполнить наш массив числами из пользовательского ввода.

        for (int i=0; i < list.length; i++){
            System.out.println("Enter an integer: ");
            int integer= input.nextInt();
            list[i] = integer; //set array value at index to user input
        }

Наконец, нам нужно перебрать каждое число в массиве и определить, является ли оно четным. Затем распечатайте его.

        System.out.print("Evens: ");
        for (int integer : list) {
            if (integer % 2 == 0) { //check if even
                evenCount++; //increment even number count
                System.out.print(" " + integer); //print the even integers
            }
        }

Затем разделите количество четных чисел на общее количество чисел в массиве, чтобы получить процент четных чисел.

         System.out.println("Even count: " + evenCount);
         System.out.println("Percent even: " + (double)evenCount / list.length);

Полный код:

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("How many numbers in the array?");
        int num = input.nextInt();
        int evenCount = 0;
        int[] list = new int[num];

        for (int i=0; i < list.length; i++){
            System.out.println("Enter an integer: ");
            int integer= input.nextInt();
            list[i] = integer;
        }

        System.out.print("Evens: ");
        for (int integer : list) {
            if (integer % 2 == 0) {
                evenCount++;
                System.out.print(integer + " "); //print the even integers
            }
        }

         System.out.println();
         System.out.println("Even count: " + evenCount);
         System.out.println("Percent even: " + (double)evenCount / list.length);
    }

Я думаю, вы неправильно поняли мой вопрос. Я хочу, чтобы четные числа не учитывались :) Спасибо за помощь! Я узнал новую вещь, хотя

user547075 20.02.2019 00:29

@user547075 user547075, пожалуйста, смотрите обновленный ответ, третий фрагмент кода включает печать четных чисел.

vs97 20.02.2019 00:30

Я проголосовал за подход к объяснению «разбить его на шаги».

user10762593 20.02.2019 00:30

Я до сих пор не вижу, что вы делаете то, о чем просил ОП. Вы не показываете список четных чисел.

CryptoFool 20.02.2019 00:31

Я имел в виду, что хотел что-то вроде эвенов: 2,6,8,0,-8 :) Кроме того, не нужно ли его удваивать? Я думаю, что в противном случае он печатает 0.

user547075 20.02.2019 00:35

@ user547075 это просто добавление оператора System.out.println перед циклом for - см. выше.

vs97 20.02.2019 00:39

Другие вопросы по теме