Выражение с помощью Math.random () всегда возвращает одно и то же значение - PullRequest
0 голосов
/ 14 декабря 2018

По какой-то причине эта строка кода int u=(int)Math.random()*6 + 1; в результате вернет только 1.

Я обнаружил, что он просто пропускает все (int)Math.random()*6 и использует только 1, так как когда я изменил его на 2, он только вернул 2.

Кто-нибудь знает, что происходит?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Что происходит:

  1. Math.random() Возвращает двойное значение со знаком плюс, большим или равным 0,0 и меньшим 1,0.
  2. (int)Math.random() стоимостьдвойное значение до 0, поскольку приведение типа имеет более высокий приоритет по сравнению с *.
  3. (int)Math.random()*6 всегда равно 0, вы получаете то, что имеете.
0 голосов
/ 14 декабря 2018

Приведение от Math.random() к int происходит до умножения на 6. Оператор приведения имеет более высокий приоритет , чем *.

Метод Math.random()возвращает случайное число от 0 (включительно) до 1 (исключая), поэтому приведение всегда возвращает 0.

Чтобы обеспечить правильный диапазон, умножьте Math.random() перед бросок, вставив скобки.Диапазон от Math.random() * 6 составляет 0 (включительно) до 6 (эксклюзив).

int u = (int) (Math.random()*6) + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...