2013-06-02 5 views
0

Я хотел бы знать, как я мог бы получить случайное целое число между Integer.MIN_VALUE и Integer.MAX_VALUE. Я сделал это попробовать:Случайные целые числа - как положительные, так и отрицательные

int min = Integer.MIN_VALUE; 
int max = Integer.MAX_VALUE; 

Random rand = new Random(); 
StartVärde = rand.nextInt(max - min + 1) + min; 

Пожалуйста, обратите внимание, что я импортировал java.util.Random и «StartVärde» это просто переменная я создал. Теперь код выше выдает следующее сообщение об ошибке:

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive 
at java.util.Random.nextInt(Random.java:265) 
at Räknare.<init>(Räknare.java:28) 
at Räknare_Main.main(Räknare_Main.java:5) 
+0

возможного дубликата [Выбрать случайное целое число в диапазоне больше, чем Integer.MAX \ _value?] (HTTP: // StackOverflow. com/questions/10773617/select-random-integer-in-a-range-more-than-integer-max-value) –

+0

См. ответы ниже. Кроме того, причина в том, что max-min не вписывается в целое число и поэтому не может быть передан nextInt. Используйте nextLong(), если вы хотите что-то с большим диапазоном. – Nicholaz

+1

Кроме того, вы можете столкнуться с проблемами со специальными символами в именах переменных. Если бы я был вами, я бы переименовал 'StartVärde' в' startVaerde' (нижний регистр из-за соглашений об именах Java). – jlordo

ответ

4

Из Javadoc для Random.nextInt()

Возвращает следующий псевдохаотическом равномерно распределенную INT значение из последовательности этого случайного числа генератора. Общий договор nextInt заключается в том, что одно значение int псевдослучайно сгенерировано и возвращается . Все 2 Возможные значения int производятся с (приблизительно) равной вероятностью.

Таким образом, если вы используете Random.nextInt() это будет возвращать значение между Integer.MIN_VALUE и Integer.MAX_VALUE

1

Из документов Java для nextInt() из java.util.Random:

All 2^32 possible int values are produced with (approximately) equal probability. 

Вы можете захотеть попробовать

StartVärde = rand.nextInt(); 

По по умолчанию, это приведет к положительным и отрицательным случайным числам.

+1

Нет, вам нужно 'Random.nextInt()' ** not ** 'Random.nextInt (int n)'. –

+0

@assylias скорректировал exmaple –

3

Вместо этого вы можете использовать rand.nextInt(). Он вернет случайный int из 32 бит. Поскольку в Java int интерпретируются как подписанные, вы получите как положительные, так и отрицательные значения.

Подробнее:

Смежные вопросы