Номер слишком длинный для передачи в Random ()? - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь сделать

Random generator = new Random(1309233053284);

Random будучи java.util.Random

Он говорит, что число слишком длинное, но почему System.currentTimeMillis() можно передать конструктору?Он возвращает еще большие числа.

1309233053284 - это миллисекунды, если вам интересно.

Ответы [ 3 ]

10 голосов
/ 28 июня 2011

Возможно, вам повезет больше:

Random generator = new Random(1309233053284L);

В Java все литеральные числа имеют тип int, если не указано иное. Чтобы ваш номер интерпретировался как long, вам необходимо добавить к нему суффикс «L» (или, альтернативно, «l», но его трудно отличить от «1», и поэтому он несколько менее понятен).

3 голосов
/ 28 июня 2011

Попробуйте это

Random generator = new Random(1309233053284l);

Вы должны указать его как длинный.

Если вы вызовете new Random(1309233053284), он будет использовать конструктор, принимающий аргумент int. Когда вы вызываете new Random(System.currentTimeMillis()), он использует constructur, принимающий аргумент long, поскольку System.currentTimeMillis() возвращает long. Чтобы это работало, вы также должны указать 1309233053284 как длинную, добавив l.

0 голосов
/ 28 июня 2011

целочисленные литералы имеют тип int по умолчанию.Вам нужно добавить f для float, d для double и L для long.L предпочтительнее l, так как последний может выглядеть как 1

например

31 <= 31 as an int
3l <= looks like 31 but is 3 as a long.
31L <= 31 as a long.
311 <= is 311 as an int.
...