[解決済み] Java: 0 <= x < n の範囲にあるランダムな長さの数
2022-02-19 15:52:50
質問
Randomクラスは、指定された範囲のランダムなintを生成するメソッドを持っています。例えば
Random r = new Random();
int x = r.nextInt(100);
これは、0以上100未満のint型数値を生成するものです。これと全く同じことをlong数で行いたい。
long y = magicRandomLongGenerator(100);
RandomクラスにはnextLong()しかなく、範囲を設定することができません。
解決方法は?
からのスタートです。
Java 7
(またはAndroid API Level 21 = 5.0+) を直接使用することができます。
ThreadLocalRandom.current().nextLong(n)
(0 ≤ x < n の場合) と
ThreadLocalRandom.current().nextLong(m, n)
(for m ≤ x < n). 参照
アレックス
の回答が詳しいです。
に引っかかったら
Java 6
(または Android 4.x) を使用する場合は、外部ライブラリ (例.
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;
}
関連
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み】乱数生成器を使うとモジュロバイアスがかかると言われるのはなぜ?