Как показать только вхождения чисел, введенных пользователем в java?

Я новичок в программировании и пытаюсь решить эту проблему, но понятия не имею, что я сделал не так.

Программа должна принимать пользовательский ввод до тех пор, пока не будет введен 0, а после этого распечатать информацию о вхождениях введенных пользователем чисел - и вот моя проблема.

Программа, которую я написал, показывает вхождения всех чисел (вплоть до максимального числа, которое может быть введено), а не только тех, которые написал пользователь.

Мой код:

package numbers;

import java.util.Scanner;

public class Numbers {

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

        int[] occurences = new int[11];

        int num = scan.nextInt();
        while (num > 0 && num <= 11) {
            occurences[num]++;
            num = scan.nextInt();
        }
        for (int i = 0; i < 11; i++) {
            System.out.print("Value: " + i + " Occurences: " + occurences[i] + " ");
        }
    }
}

не забудьте проверить, что происходит, когда пользователь вводит 11, что разрешено, поскольку условие цикла while содержит && num <= 11

user16320675 09.04.2022 11:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте оператор if, чтобы напечатать только числа, вхождения которых больше 0.

Боковые примечания:

  1. Инициализация значений массива не требуется:
for (int i = 0; i < 11; i++) {
   occurences[i] = 0;
}

Значение по каждому индексу уже равно 0, проверьте этот вопрос.

  1. Хотя условие цикла не имеет особого смысла
while (num > 0 && num <= 11) {
   occurences[num]++;
   num = scan.nextInt();
}

Размер массива равен 11, что означает диапазон индексов от 0 до 10 включительно. Поскольку вы разрешаете ввод 11, вы получите ArrayIndexOutOfBoundsException.

Вы можете воспользоваться картой.

    Map<Integer, Integer> occ = new HashMap<>();

    int num = scan.nextInt();
    while (num > 0 && num <= 11) {
        occ.put(num, occ.getOrDefault(num, 0)+1);
        num = scan.nextInt();
    }

    for(int i : occ.keySet()){
        System.out.print("Value: " + i + " Occurences: " + occ.get(i) + " ");
    }

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