2012-12-05 11 views

Odpowiedz

27

Jeśli chcesz zakres oparty długie wartości następnie wykonaj poniżej:

long LOWER_RANGE = 0; //assign lower range value 
long UPPER_RANGE = 1000000; //assign upper range value 
Random random = new Random(); 


long randomValue = LOWER_RANGE + 
          (long)(random.nextDouble()*(UPPER_RANGE - LOWER_RANGE)); 
+1

+1 Warto zauważyć, że Random używa 48-bitowego materiału siewnego, więc nie wygeneruje wszystkich możliwych "podwójnych" lub "długich". SecureRandom działa wolno, ale generuje wszystkie możliwe wartości. –

+3

Dlaczego nie użyłeś funkcji nextLong()? –

1

Można użyć nextInt generować wyższe i niższe ints długiego. Można nawet rozszerzyć klasę losową za pomocą własnej metody nextLong (nawet jeśli kompozycja może być bezpieczniejszym wyborem do poważniejszego programowania).

Spójrz na Javadoc następnegoInt (int n). Metoda nextLong może zostać zaimplementowana przy użyciu tego samego algorytmu. Poprawienie tego może okazać się nieco trudne. Przygotuj się do matematyki za pomocą pióra i papieru. Używanie sprawdzonej biblioteki jest mądre, jeśli nie tylko piszesz dla zabawy.

+0

To nie jest poprawne; czasami zwróci wartości większe niż n. –

+0

@StefanReich True. Niskie bity n będą ignorowane. Będę edytować odpowiedź. –

+0

@StefanReich Usunąłem zły przykład. –