2015-01-16 3 views
0

Рассмотрим следующий код:Как получить случайное число с отрицательным числом в диапазоне?

int rand = new Random().nextInt((30 - 20) + 1) + 20 

Она возвращает случайное число в диапазоне от 30 до 20. Тем не менее, мне нужно его диапазон включить отрицательные числа. Как включить отрицательные числа в генерацию? Я пробовал использовать математику, которая была бы отрицательной, но это привело к ошибке. Простое вычитание или добавление отрицательных чисел не даст желаемого значения.

EDIT: Извините, я всего лишь проснулся. Правильный код: int rand = new Random().nextInt((30 - 20) + 1) + 20;.

+5

«Это возвращает случайное число в диапазоне от 30 до 20» - Нету ... – alfasin

+0

@alfasin Я собирался сказать то же самое. Кроме того, OP, какой диапазон - диапазон чисел, который вы хотите иметь? –

+0

Возможный дубликат [Как генерировать случайные положительные и отрицательные числа в java] (http://stackoverflow.com/questions/3938992/how-to-generate-random-positive-and-negative-numbers-in-java) –

ответ

8

Чтобы получить случайное число между заданным диапазоном с min и max:

int number = random.nextInt(max + 1 -min) + min; 

Также работает с отрицательными числами

Итак:

random.nextInt(30 + 1 + 10) - 10; 
// max = 30; min = -10; 

даст случайный Int между -10 и 30. (включительно)

Также работает с двойниками

0

Хорошо. Во-первых, попытаться создать только Random экземпляр один раз, но для примера

int rand = -15 + new Random().nextInt(31); 

является диапазон от -15 до 15. Random.nextInt(int) JavaDoc говорит (частично) Возвращает псевдохаотическом равномерно распределенную значение INT в диапазоне от 0 (включительно) и указанное значение (исключение). Обратите внимание, что приведенный вами пример (30 - 20) + 1 - это диапазон от 0 до 10 (включительно).

Редактировать

в качестве еще одного примера, чтобы получить диапазон от 20 до 30 вы

int rand = 20 + new Random().nextInt(11); 

Помните, что границы результата 0 до n.

Редактировать 2

30 - -10. Я пытаюсь сделать симулятор выживания. Это будет моя температура.

Ok. Давайте напишем этот диапазон как -10 до 30. nextInt(n) вернет значение между 0 и n, поэтому, если вам нужен диапазон ниже 0, вы должны вычесть 10 из результата и добавить 10 в n. Это

Random random = new Random(); 
int rand = random.nextInt(41) - 10; 

Теперь давайте рассмотрим, как мы можем определить эти числа. Помните, nextInt() вернется между 0 и n (эксклюзивно), и мы хотим, чтобы -10 - 30 (включительно); поэтому 41 - n, и мы вычитаем 10. Если результат 0 (мин.), Мы получаем -10, если результат 40 (максимальный), мы получаем 30.

0
int randomNumber=(random.nextInt(DOUBLE_MAX)-MAX); 

В качестве альтернативы создайте случайный положительный или отрицательный 1 и умножьте его.

4

Вы можете использовать Random.nextBoolean(), чтобы определить, является ли случайным положительным или отрицательным int.

int MAX = 30; 
    Random random = new Random(); //optionally, you can specify a seed, e.g. timestamp. 
    int rand = random.nextInt(MAX) * (random .nextBoolean() ? -1 : 1); 
Смежные вопросы