Помните местоположение (?) В Случайном семени? - PullRequest
1 голос
/ 17 января 2020

Прежде всего: я в основном самоучка, поэтому, пожалуйста, прости меня, если я не знаю правильную терминологию или не совершил какую-то ладью ie.

Итак, я делаю переменную Random с начальным числом. Когда вы получаете «next» из переменной, оно получает следующее значение из этого начального числа. Есть ли способ записать ваше местоположение в случайной переменной? Например, в идеале следующий код будет выводить две идентичные строки:

//My attempt to save my location in a Random:

r = new Random(5);

for (int i = 0; i < 10; i++) {
    System.out.print(r.nextInt(2));
    if (i == 9) {
        System.out.print(" ");
    }
}

//====================================

System.out.println("\n-------------");
r = new Random(5);
for (int i = 0; i < 5; i++) {
    System.out.print(r.nextInt(2));
}

r = new Random(r.nextLong());
System.out.print(" ");
for (int i = 0; i < 5; i++) {
    System.out.print(r.nextInt(2));
}

, но вместо этого возвращает:

1001010100 1100110011
-------------
1001010100 0010010111
-------------

Есть ли какой-нибудь способ «запомнить» мое местоположение, такой, чтобы я мог создать новую переменную Random, которая будет продолжаться там, где остановилась предыдущая? Я бы предпочел не сериализовать переменную - это не конец света, но мне интересно, есть ли другой способ.

1 Ответ

2 голосов
/ 17 января 2020

Вы не можете сгенерировать n чисел с одним начальным числом, а затем использовать другое начальное число, чтобы начать с того места, где остановился предыдущий ряд.

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

Последние 5 значений первого списка должны равняться первым 5 из следующего.

        Random r = new Random(23);
        r.ints(10,1,100).forEach(a->System.out.print(a + " " ));
        System.out.println();

        r = new Random(23);

        r.ints(10,1,100).skip(5).forEach(a->System.out.print(a + " "));

Вы также можете просто продолжить использование того же Random Например, если они не имеют срока действия.

       r = new Random(23);

        r.ints(5,1,100).forEach(a -> System.out.print(a + " "));
        r.ints(5,1,100).forEach(a -> System.out.print(a + " "));

Конечно, если вы хотите хранить один и тот же объект в течение длительного времени или иметь огромное количество случайных значений для генерации и отслеживания, то сериализация наверное лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...