Я новичок в программировании и пытаюсь решить эту проблему, но понятия не имею, что я сделал не так.
Программа должна принимать пользовательский ввод до тех пор, пока не будет введен 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] + " ");
}
}
}
Используйте оператор if
, чтобы напечатать только числа, вхождения которых больше 0.
Боковые примечания:
for (int i = 0; i < 11; i++) {
occurences[i] = 0;
}
Значение по каждому индексу уже равно 0, проверьте этот вопрос.
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) + " ");
}
не забудьте проверить, что происходит, когда пользователь вводит
11
, что разрешено, поскольку условие цикла while содержит&& num <= 11