Po pierwsze: Jestem w większości samodzielnie nauczany, więc wybacz mi, jeśli nie znam poprawnej terminologii ani nie popełnić błędu debiutów.

Więc robię losową zmienną z nasionem. Kiedy otrzymujesz "następny" ze zmiennej, otrzymuje kolejną wartość z tego nasion. Czy jest jakiś sposób na nagranie swojej lokalizacji w zmiennej losowej? Na przykład, najlepiej następujący kod wyprowadziłby dwa identyczne ciągi:

//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));
}

Ale zamiast tego wróci:

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

Czy istnieje jakiś sposób, aby "zapamiętać" Moja lokalizacja, tak, że mogę utworzyć nową zmienną losową, która będzie kontynuowana tam, gdzie poprzednio pozostało? Korzystnie, wolałbym nie serializować zmiennej - nie byłoby to koniec świata, ale zastanawiam się, czy jest jakiś inny sposób.

1
evictedSaint 17 styczeń 2020, 22:09

1 odpowiedź

Najlepsza odpowiedź

Nie można generować numerów n za pomocą jednego nasion, a następnie użyj innych nasion, aby rozpocząć, w którym poprzedni seria została wyłączona.

Możesz ponownie użyć tych samych nasion i użyć strumienia i pominąć poprzednie numery, które wygenerowałeś.

Ostatnie 5 wartości pierwszej listy powinno być pierwsze 5 następnego.

        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 + " "));

Możesz także kontynuować korzystanie z instancji {x0}}, ponieważ nie wygasają.

       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 + " "));

Oczywiście, jeśli chcesz zachować ten sam obiekt przez długi czas lub mieć ogromną liczbę losowych wartości do generowania i śledzenia, a następnie serializację jest prawdopodobnie najlepszym rozwiązaniem.

2
WJS 17 styczeń 2020, 19:47