始まったJava 7あなたが直接使用することができます(または= 5.0以上のAndroid APIレベル21)ThreadLocalRandom.current().nextLong(n)
(≤X <nは0)とThreadLocalRandom.current().nextLong(m, n)
(≤X <N Mのため)。詳細については、@ Alexの回答を参照してください。
あなたがで立ち往生している場合はJava 6の(またはAndroid 4.xの)あなたは外部ライブラリを使用する必要がある(例えばorg.apache.commons.math3.random.RandomDataGenerator.getRandomGenerator().nextLong(0, n-1)
、参照@mawaldneの答えを)、または自分自身を実装しますnextLong(n)
。
https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Random.htmlに よるとnextInt
、
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;
}
したがって、これを変更して実行することができますnextLong
。
long nextLong(Random rng, long n) {
// error checking and 2^x checking removed for simplicity.
long bits, val;
do {
bits = (rng.nextLong() << 1) >>> 1;
val = bits % n;
} while (bits-val+(n-1) < 0L);
return val;
}