2012-03-24 4 views
1

16桁の数字をランダムに入力する必要があります。そして、私が得たランダム関数は大きな数値では機能しません。私はこの機能を持って:ランダムなJavaの16桁の数値関数

int pin = new Random().nextInt(10000); 

をしかし、私は1000000000000のような大きな数を置けば、それはint型ではないので、それは動作しません、とnextLongはそのように私には機能していません。おかげさまで

+0

なぜ 'nextLong()'を使用せず、除算と 'mod'sを実行できますか?また、この数学やJavaの宿題ですか?あなたが数学の宿題をしているならば、一様分布の擬似乱数列を得ることには微妙なことがあるからです。 –

+0

'nextLong'と' mod'は、一様分布の擬似乱数列に含まれる微妙な部分によって_bitten_を得るのに最適です。 –

答えて

3

2つの乱数を連結して、より長い乱数を作成することができます。

ので:

  1. はnextInt(100000000)を使用して、8桁のランダムな番号を取得します。
  2. ビットシフトは8桁で、左に約10ビットです。
  3. 2番目の8桁の乱数を取得します。
  4. 最終的なLong乱数を得るには、2つの数値をビットごとにORします。

意味がありますか?

+0

はい、意味があります。私はそれについて考えていましたが、それが別の最短の方法であるかどうかを見ていましたが、ありがとうございました。 –

+0

8ビット左シフトは、あなたが望むことをしません。最も近い近似はx 1000ごとに10ビットです。 –

+0

はい、申し訳ありません。あなたは約10バイナリビットになるように、左に8桁の数字をシフトする必要があります。 – dcow

-1

あなたがN桁で任意の大きさの乱数を生成したい場合は、あなたがたBigIntegerを使用して試みることができる

StringBuffer buf=new StringBuffer(); 
rng=new Random(); 
for(int a=0;a<N;a++) 
    buffer.append((char) ('0'+rng.nextInt(10))); 
return buffer.toString(); 
+0

あなたは宿題に関する質問に回答を掲載すべきではありません。彼は学んでいて、答えを教えてくれるのではなく、自分の足で答えを得るのを助けるべきです。 – SHiRKiT

0

を作成するためのこの記事を参照してください使用されているアルゴリズムについて議論し、それをlongと一緒に使用するように適応させるような外観を持つdocumentation for Random.nextInt(int n)があります。

public int nextInt(int n) { 
    if (n <= 0) 
    throw new IllegalArgumentException("n must be positive"); 

    if ((n & -n) == n) // i.e., n is a power of 2 
    return (int)((n * (long)next(31)) >> 31); 

    int bits, val; 
    do { 
    bits = next(31); 
    val = bits % n; 
    } while (bits - val + (n-1) < 0); 
    return val; 
} 

リンクをクリックして、詳細はドキュメントを読んで:ドキュメントから

関連する問題