2013-12-20 4 views
1

Вот два из вариаций для генерации случайных чисел в пределах range (start, end):Разве это случайное число поколение в эквиваленте диапазона в Java?

Метод 1:

int rand = (int)(Math.random()*(end-start)+1)+start; 

Метод 2:

Random numbergenerator = new Random(); 
int rand=numbergenerator.nextInt(end-start)+start; 

Метод 2, кажется, работает для меня.

Причина, по которой я прошу об этом: я пытался отладить мой код, и когда я изменил свое случайное int поколение на метод 2, все, похоже, работает нормально. Метод 1 давал неожиданные результаты.

Неожиданные результаты приходят из разных сообщений: но это отвлечение на этот вопрос еще here. Здесь я заменил mehtod 1 на метод 2, и все работало нормально.

, так что вопрос в том, являются ли эти методы случайного целого поколения разными. метод 1, который был использован в этом post.

Что было бы примером, где оба они могли отличаться (если они разные)?

+1

Каким образом результаты неожиданны? –

+2

Случайные числа должны быть неожиданными. В этом-то и дело. – Eran

+1

"* Что будет примерный случай, когда они оба могут отличаться (если они разные) *« Скажите нам! Вы заметили неожиданные результаты! –

ответ

3

Учитывая, что ваши неожиданные результаты приходят from a sorting algorithm, я подозреваю, что по неожиданно вы имеете в виду, что он действительно не сортирует числа.

Проблема в том, что диапазон случайных чисел не является одним и тем же в обоих методах. Диапазон в методе 1 равен [start+1 , end], а в методе 2 - [start, end-1].

Поэтому в основном удалить +1 часть здесь:

int rand = (int)(Math.random()*(end-start)+1)+start; 

так что диапазон является обычным [start, end-1]. Я говорю обычный, потому что массивы индексируются в диапазоне [0, length-1].

+0

, что прояснило это красиво. Благодаря! –

+0

@ user1988876 рад помочь –

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