15

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

4

5 に答える 5

24

Random.nextShort()方法がないので、

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

+1は、メソッドが指定された数(排他的)までの数を返すためです。こちらをご覧ください

これにより、0からShort.MAX_VALUEまでの数値が生成されます(負の数はOPから要求されませんでした)

于 2012-04-17T09:59:44.600 に答える
13

考えられるすべての短い値を生成できる最も効率的な解決策は、どちらかを実行することです。

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();
于 2012-04-17T10:18:37.147 に答える
11

Javaショーツは、-32768→+32767の間隔に含まれています。

なぜあなたは実行しませんか

Random.nextInt(65536) - 32768

結果を短い変数にキャストしますか?

于 2012-04-17T09:59:46.543 に答える
6

どうshort s = (short) Random.nextInt();ですか?結果の分布にはバイアスがある可能性があることに注意してください。Java言語仕様は、これによって例外が発生しないことを保証します。intは、短縮形に収まるように切り捨てられます。

編集

実際に簡単なテストを行うと、結果の分布も均一に分布しているように見えます。

于 2012-04-17T09:59:41.580 に答える
3

次のようなintを生成するだけです。

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

生成intされた値はの値空間にshortあるため、データを失うことなくキャストできます。

于 2012-04-17T10:00:01.013 に答える