2012-04-17 8 views
11

Random.nextInt(134116)という整数型の関数とまったく同じように、short型の乱数を生成したいと思います。どうすれば達成できますか?Javaで短い乱数を生成しますか?

+0

は負の数を、あなたが必要なのですか? – luketorjussen

+0

いいえluke私は0から最大の短く – waqas

答えて

19

は、何のRandom.nextShort()方法はありません。 Short.MAX_VALUE包括的に0からhere

この生成されます番号(負の数OPによって要求されていなかった)

+0

キャストが必要です。 –

+0

ありがとうございます@juergend、私は答えを更新しました – luketorjussen

+0

しかし、あなたが1を追加すると、0を生成することができなくなりますか? – Tudor

6

short s = (short) Random.nextInt();?結果の分布に偏りがあるかもしれないことに注意してください。 Java言語仕様では、これにより例外が発生しないことが保証されています.intは短くなるように切り捨てられます。実際に簡単なテストをやって

EDIT

、結果の分布が均一に分散しすぎているように見えます。あなたはメソッドは、指定された数(排他的)に番号を返すため

short s = (short) Random.nextInt(Short.MAX_VALUE + 1); 

+1が使用できるよう

+0

だけネガネを必要としない何が生成された数が短く保持されるよりも大きい場合は? – luketorjussen

+0

最後の4ビットだけが保持されますが、オーバーフローは発生しません。 – assylias

+0

しかし、それは生成された乱数の微調整均一性を変更するのだろうか? –

9

Javaのショーツは32 767間隔→-32 768に含まれているを参照してください。

なぜあなたは

Random.nextInt(65536) - 32768 

を実行し、短い変数に結果をキャストしていないでしょうか?

+1

+1 - 私はまさにそのことを書こうとしていました。 – Deco

+4

私はそれを推測してあなたのために書いたので、キーボードの寿命を延ばすでしょう。 –

3

だけのようなint型を生成します。それは、データを損失することなくキャストできるよう

short s = (short)Random.nextInt(Short.MAX_VALUE); 

生成intは、shortの値空間になります。

+0

これは、Short.MAX_VALUEを除いて、負でない短い値を生成します –

8

可能なすべての短い値を生成できる最も効率的なソリューションは、どちらかを実行することです。

short s = (short) random.nextInt(1 << 16); // any short 
short s = (short) random.nextInt(1 << 15); // any non-negative short 

またはさらに速く

class MyRandom extends Random { 
    public short nextShort() { 
     return (short) next(16); // give me just 16 bits. 
    } 
    public short nextNonNegativeShort() { 
     return (short) next(15); // give me just 15 bits. 
    } 
} 

short s = myRandom.nextShort(); 
+2

実際にうまくいっています。 – assylias