Нужна помощь для массива в java - PullRequest
0 голосов
/ 25 апреля 2020

Я изучаю этот код.

import java.util.*;
public class JavaRandomMath {


    public static void main (String [] args)
    {


        Random rand = new Random();

        int freq[] = new int [5];

        for (int roll = 0; roll <= 5; roll++)
        {

            ++freq[1 + rand.nextInt(4)];

        }


        System.out.println("Face\tFrequency");


    for (int face = 0; face < freq.length; face++)
        {

            System.out.println(face + "\t" + freq[face]);

        }   


    }

}

Я пытался понять это сам, и могу понять остальное, кроме этой одной строки

++freq[1 + rand.nextInt(4)];

, который находится в первом для l oop.

Я попытался использовать точку останова, чтобы увидеть, что происходит позади. Что я могу понять из отладчика, так это то, что каждый раз при l oop LOOPS индексам массива freq присваивается новое значение random.nextInt.

Что я не могу понять там это целая линия. Частота ++ очень смущает меня. Похоже, это увеличивается? и после ++ freq есть скобка [], которая имеет это внутри

1 + rand.nextInt(4)

Я уже прочитал документы случайного класса в java. 1 может использоваться для добавления сгенерированного числа, но почему оно должно быть внутри this [], и что означает ++ freq перед []?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Строка может быть более четко написана как:

int face = 1 + rand.nextInt(4);
freq[face] += 1;

nextInt(4) возвращает значение от 0..3 включительно, поэтому 1 добавляется к результату (большинство кубиков не имеют 0 face).

++freq[i] предварительно увеличивает на единицу значение в массиве freq по индексу i.

1 голос
/ 25 апреля 2020

Ваша оценка довольно верна. Вы должны удалить добавление 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;

Надеюсь, что это добавит ясности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...