Не понимаю работу (Math.random())

122
25 декабря 2020, 07:10
public class Generator {
    public static void main(String[] args) {
        String[] surnameList = {"Вишневский", "Сидоров", "Заперской", "Вафлистов", "Мичурин", "Иванов", "Алеексеев", "Петухов"};
        String[] nameList = {"Александр", "Иван", "Алексей", "Максим", "Владимир", "Геннадий", "Петр", "Ярослав"};
        String[] patronymicList = {"Анатольевич", "Александрович", "Владимирович", "Алексеевич", "Сергеевич", "Максимович", "Ярославович", "Иванович"};
        // Вычисляем, сколько слов в каждом списке
        int surnameLength = surnameList.length;
        int nameLength = nameList.length;
        int patronymicLength = patronymicList.length;
        //Генерируем три случайных числа
        int rand1 = (int) (Math.random() * surnameLength);
        int rand2 = (int) (Math.random() * nameLength);
        int rand3 = (int) (Math.random() * patronymicLength);
        //Строим фразу
        String phrase = surnameList[rand1] + " " + nameList[rand2] + " " + patronymicList[rand3];
        //Выводим фразу
        System.out.println("Ваш напарник это - " + phrase);
    }
}

Не понимаю как отрабатывает Math.random() и что он генерирует и умножает на surnameLength например. В дебаге я не смог посмотреть что генерирует Math.random().
В книге по этому примеру написано:
Метод random() возвращает случайно число между 0 и 1 поэтому мы должны умножить это число на количество элементов (длину массива) в нашем списке. Но если у нас метод random() возвратит как написано 0 и 0 умножается на 8(длина каждого массива), то будет по итогу в этом случае всегда 0 индекс (8*0=0).

Answer 1

Работа Math.random():

Он случайным образом генерирует числа от 0 до 1, т.е. 0, 0.1, 0.2, 0.3 ... 0.9.

Проблема у вас в том, что Math.random() возвращает double значение меньше 1, а при использовании (int) Math.random() оно округляется в меньшую сторону, т.е. к 0.

READ ALSO
Помогите разобраться с protected?

Помогите разобраться с protected?

Во время подготовки к экзамену OCA по Боярскому, встретил пример на стр178 Он касается модификатора доступа protected и звучит примерно так, что...

135
Что значит ошибка: reached end of file while parsing }

Что значит ошибка: reached end of file while parsing }

Вот здесь похожий вопросОтвет кроется в вашем методе main(){} как уже подметил @Grundy

326
Получить отдельные параметры даты объекта Date

Получить отдельные параметры даты объекта Date

На клиенте в браузере получаю дату:

115
React - бесконечный render

React - бесконечный render

В componentDidUpdate делаю второй поход за данными, что бы после добавления новой задачи( компонент AddTaskInput), изменения статуса или удаления (компонент...

188