Ваша оценка довольно верна. Вы должны удалить добавление 1 к вызову nextInt (), чтобы сохранить диапазон случайных чисел от 0..4 включительно и оставаться в пределах вашего массива freq. Измените его на: ++freq[rand.nextInt(4)];
rand.nextInt()
случайным образом выбирает элемент в массиве путем случайного вычисления индекса, к которому нужно получить доступ (случайное число от 0 до 4).
++ freq [index] эквивалентно выражению: выберите элемент из массива freq по индексу, а затем увеличьте значение этого индекса на 1.
В качестве примера. Когда вы впервые объявите freq: int freq[] = new int[5];
, у вас будет массив всех 0: freq[] = {0, 0, 0, 0, 0}
Тогда в l oop вы получите следующее утверждение: ++freq[rand.nextInt(4)];
Давайте предположим, что rand.nextInt(4)
случайным образом выбирает 3.
++freq[3];
Напомним, что массив был инициализирован для всех нулей, поэтому freq[3]
, в этот момент = 0 или:
freq[3] = 0;
И, наконец, ++ является пост- Оператор инкремента и будет увеличивать текущее значение freq [3] на 1 или:
++feq[3]; is equivalent to:
freq[3] = freq[3] + 1; is equivalent to:
freq[3] = 0 + 1; is equivalent to:
freq[3] = 1;
Надеюсь, что это добавит ясности.