2017-02-09 11 views
-2

Я посмотрел, как добавить 0-99 в массив. Но мое задание было 1-1000000. Я просто продолжаю получать действительно большие числа и не малые числа. Это просто потому, что вероятность получения больших чисел намного выше? Я просто хотел убедиться, что делаю все правильно. Заранее благодарю за любую помощь!Добавление случайных чисел 1-1000000 в массив?

int a[]= new int[50]; 
for(int i = 0; i < 50; i++) { 
    a[i] = (int)(Math.random() * 10000000); 
} 
+0

зависит, что вы имеете в виду под «маленький» – pvg

+0

Что вы считаете большое количество? –

+1

Это нормальный случай. Если все числа имеют равное распределение, вероятность получения числа> 1000000 равна 0,9, а число <= 1000000 равно 0,1. Идя еще на один шаг, число <= 100000 имеет вероятность 0,01. И это все еще довольно большое число. Число ниже 1000 имеет вероятность 1/10000. Я только что заметил, что вы используете 1mio как верхнюю границу самого вопроса, но 10mio в коде. Мои значения основаны на верхней границе 10mio. – Paul

ответ

0

Зависит от того, что вы называете небольшими числами.

Например, получение числа ниже 1000 означает, что ему необходимо будет соответствовать 0,1% от интервала в 1000, это всего лишь 0,1% от всех чисел от 1 миллиона.

Кроме того, обратите внимание, что таким образом вы получите номера между 0 и 999999 (включительно). Чтобы получить 1-1000000, вам необходимо добавить 1:

a[i] = (int)(Math.random() * 10000000)+1; 
+0

Спасибо за помощь! Я просто передумал. –

0

Хорошо, если вы надеялись получить номер ниже 1000, вероятность 1/10000 равна 0,01%. Ваш код в порядке, но с этими настройками получить небольшое количество маловероятно

0

Да, с этим будут доминировать большие числа. Это потому, что половина чисел превышает 500 000. Аналогичным образом, 9/10 номеров составляют более 100 000. Таким образом, 9/10 номеров будут иметь шесть цифр.

0

[Несколько ортогональное решение вашего вопроса]

Один из вариантов можно рассмотреть, чтобы перетасовать массив после добавления номера на основе ожидаемого распределения, которые могут быть все числа добавляются один/некоторые номера добавлены множественные раз/несколько простых чисел несколько раз и т. д.

Я лично использовал его, чтобы покрыть некоторые случаи для разработки игры.

Вот ответ, который может помочь вам перетасовать: Credits

List<Integer> solution = new ArrayList<>(); 
    for (int i = 1; i <= 6; i++) { 
     solution.add(i); 
    } 
Collections.shuffle(solution);