Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с Random числами 
:(
    Опции темы
bulat01
Дата 20.12.2010, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 26.10.2010

Репутация: нет
Всего: 0



Здравствуйте спецы по Java,
помогите разобраться с кодом, точнее с применением Random

Код

import java.util.*;

public class ArrayNew {
    public static void main(String[] args) {
        int[] a;
        Random rand = new Random(47);
 
        a = new int[rand.nextInt(20)];       
        System.out.print("length of a = " + a.length);
        System.out.print(Arrays.toString(a));
        }
}


При ранинге - он кидает следующий вывод:
length of a = 18[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


Random (long seed) - Creates a new random number generator using a single long seed.
nextInt (int n) - Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

Первый вопрос:
nextInt - для меня понятно его логика работы, он генерирует случайное число от 0 до 19 (исключая 20), это в моем случае.
Но почему 18, а не 19?

Второй вопрос:
Единственное что понял в логике работы Random (long seed) - что если задать начальное число, при постоянном ранинге программы - случайное число выдааное генератором неизменно.
Вы не могли бы более детально описать функцию Random (long seed)?
а также если его рассматривать с комбинацией с nextInt?






PM MAIL   Вверх
jk1
Дата 20.12.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers.


В JavaDoc в принципе все написано: Если Вы задаете одинаковый seed для двух независимых Random объектов, то генерируемые ими последовательности совпадут.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
LSD
Дата 20.12.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(bulat01 @  20.12.2010,  09:21 Найти цитируемый пост)
Вы не могли бы более детально описать функцию Random (long seed)?

1. Random это генератор псевдослучайных чисел.
2. seed это начальное значение для этого генератора. Как следствие seed полностью определяет последовательность генерируемых чисел.



Цитата(bulat01 @  20.12.2010,  09:21 Найти цитируемый пост)
Но почему 18, а не 19?

А что 18 недостаточно случайное число? smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
nc30
Дата 20.12.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Цитата(bulat01 @ 20.12.2010,  08:21)
Единственное что понял в логике работы Random (long seed) - что если задать начальное число, при постоянном ранинге программы - случайное число выдааное генератором неизменно.

Удобно использовать следующий вызов
Код

Random rand = new Random(new Date().getTime());

Учитывая, что
Цитата

long  getTime()
          Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.

можно особо не беспокоиться о повторяемости "семени" (seed) генератора "при постоянном ранинге программы" smile
PM MAIL   Вверх
LSD
Дата 20.12.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(nc30 @  20.12.2010,  17:54 Найти цитируемый пост)
Удобно использовать следующий вызов

У дефолтного конструктора Random в версии 1.4 именно такое поведение. В версиях 1.5 и старше, они используют более продвинутую методику. Думаю не имеет смысла пытаться ее улучшить, умолчальный алгоритм и так достаточно хорош.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
nc30
Дата 20.12.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



LSD, спасибо за информацию. Хотел, кстати, отослать bulat01 к API docs по Random, но самому надо читать их внимательнее smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.