에서 시작 자바 7 직접 사용할 수 있습니다 (또는 = 5.0 안드로이드 API 레벨 21) ThreadLocalRandom.current().nextLong(n)
(≤ X <N 0)과 ThreadLocalRandom.current().nextLong(m, n)
(≤ X <N m)입니다. 자세한 내용은 @Alex 의 답변을 참조하십시오 .
Java 6 (또는 Android 4.x) 이 붙어 있다면 외부 라이브러리 (예 : @mawaldne 의 답변 org.apache.commons.math3.random.RandomDataGenerator.getRandomGenerator().nextLong(0, n-1)
참조 )를 사용하거나 직접 구현해야합니다 .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;
}