2012-12-05 9 views

答えて

27

あなたは範囲ベースの長い値をしたい場合は、以下の操作を行います。

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ランダムは48ビットのシードを使用するので、すべての可能な 'double'または' long'を生成することはありません。 SecureRandomは低速ですが、すべての可能な値を生成します。 –

+3

なぜnextLong()を使用しませんでしたか? –

1

あなたが長いの上位と下位のint値を生成するためにnextIntを使用することができます。独自のnextLongメソッドを使ってランダムなクラスを拡張することも可能です(より重大なプログラミングのためのより安全な選択でも構いません)。

nextInt(int n)のJavadocを見てください。 nextLongメソッドは、同じアルゴリズムを使用して実装できます。それを正しいものにするのはちょっと難しいかもしれません。ペンと紙で数学をする準備をする。実績のあるライブラリを使用するのは、単に楽しいコーディングではない場合は賢明です。

+0

これは正しくありません。場合によってはnより大きい値を返します。 @StefanReich True。 –

+0

nの下位ビットは無視されます。私は答えを編集します。 –

+0

@StefanReich悪い例を削除しました。 –

関連する問題