2013-07-07 2 views
0

Скажем, у меня есть пять переменных a, b, c, d и e, которым назначено случайное число из пяти разных диапазонов, соответствующих пяти переменным a-e.Случайное число из серии случайных чисел в Java?

Есть ли способ назначить шестую переменную say x, которая выбирает случайное число из диапазона с верхним значением, равным сумме a + b + c + d + e?

, например, сказать: -

a=5  (range 0-10) 
b=1043 (range 0-2000) 
c=37  (range 0-38) 
d=2  (range 0-100) 
e=20  (range 5-30) 

then x = (random number) (range 5- 1107) 

Спасибо за любую помощь

+4

Да, это возможно. Что вы пробовали? –

+3

Почему диапазон x начинается с 5? – user93353

+0

Кстати, добро пожаловать в SO. Здесь, поскольку вы новичок, вы должны взять [тур] (http://stackoverflow.com/about). Удачи. –

ответ

1

Вы можете использовать

Min + (int)(Math.random() * ((Max - Min) + 1)) 

Где Min = а Max = а + Ь + с + d + e

+1

Рассмотрим 'min = 0',' max = 9', ваш код возвращает 'int' в диапазоне [0, 8], который, я считаю, не является тем, что хочет OP ... –

+1

Min + (int) (Math.random() * ((Max - Min) + 1)) можно использовать –

+1

, это правда, но это не то, что вы положили. –

1

От java.util.Random:

Random rand = new Random(); 

rand.nextInt(X); 
//returns an `int` in range: [0,X) 

Так что, если у вас есть a, b, ..., n, чтобы получить число в диапазоне от 0 до суммы переменных, мы делаем:

rand.nextInt(a + b + ... + n + 1); //returns an `int` in range [0, sum(a,b,...,n)] 


Как у других пользователей предлагается, вы также можете использовать Math.random(); однако Math.random() возвращает double в диапазоне: [0,1). Итак, если у вас есть min = 0, max = 9 и хотят число между [0,9], то вам необходимо:

Min + (int)(Math.round((Math.random() * (Max - Min)))) 
//need to cast to int since Math.round(double returns a long) 

or you could do: 

Min + (int)(Math.random() * (Max - Min + 1)) 
0

Edit: Я missunderstood вашей проблемы, но вам просто нужно суммировать каждый вар и сделать то же самое. Некоторые ответы уже показали это.

Это просто проблема с алгоритмом.

int lra = 0; // lower range of a 
int ura = 10; // upper range of a 
int lrb = 0; 
int urb = 2000; 
// a couple of ranges for each var... 

int a = lra + ((int) (Math.random() * (ura - lra))); 
// the same for each var... 

int lrs = lra + lrb + ...; // sum of lower ranges... 
int urs = ura + urb + ...; // sum of upper ranges 

int x = lrs + ((int) (Math.random() * (urs - lrs))); 
+0

Спасибо всем, у вас есть несколько идей для работы. Не могу поверить, сколько ответов у меня было за 2 часа. Нет причин для более низкого диапазона х, это всего лишь общее значение. Я посмотрю, как я получаю и публикую свои результаты, еще раз большое спасибо. – user2558274

0

Что-то, как это должно сделать работу

  Random generator = new Random(); 
      generator.setSeed(System.currentTimeMillis()); 
      long range = a+b+c+d+e; 
      long fraction = (long)(range * generator.nextDouble()); 
      randomNumber = (int)(fraction); 
Смежные вопросы