Как показать только вхождения чисел, введенных пользователем в 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
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
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) + " ");
    }

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