de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 Alex
Alex
質問

JavaでのMath.random()による乱数計算

乱数を発生させるために、私は公式を使用しました。

(int)(Math.random() * max) + min`。

Googleで検索すると、いつもこのような計算式が出てきます。

(int)(Math.random() * (max - min) + min)`となります。

どれが正しいのでしょうか?私の知る限り、私の計算式で範囲外の数字を得たことはありません。

15 2011-10-27T22:01:24+00:00 3
プログラミング
java
random
この質問には 1 つの答え があり、読むには ログイン してください。
Mark Byers
Mark Byers
27日 10月 2011 в 10:02
2011-10-27T22:02:50+00:00
さらに
ソース
編集
#13687777

もっと良い方法は

int x = rand.nextInt(max - min + 1) + min;

あなたの計算式は、minからmin + maxの間の数値を生成します。

Random random = new Random(1234567);
int min = 5;
int max = 20;
while (true) {
    int x = (int)(Math.random() * max) + min;
    System.out.println(x);
    if (x < min || x >= max) { break; }
}       

結果です。

10
16
13
21 // Oops!!

オンラインではこちらをご覧ください。[ideone][1]

Mark Byers
Mark Byers
編集した答え 27日 10月 2011 в 10:08
11
0
 F.J
F.J
27日 10月 2011 в 10:04
2011-10-27T22:04:53+00:00
さらに
ソース
編集
#13687779

Yours。最小の可能性はmin、最大の可能性はmax+min-1です。

グーグルの場合可能性の低いものはmin、可能性の高いものはmax-1

6
0
 NPE
NPE
27日 10月 2011 в 10:04
2011-10-27T22:04:42+00:00
さらに
ソース
編集
#13687778

最初のものは間違った範囲の数字を生成し、2番目のものは正しいです。

最初のものが間違っていることを示すために,minを10,maxを20とします。言い換えれば,結果は10以上であり,厳密には20以下であることが期待される。もし Math.random() が 0.75 を返すならば,最初の式の結果は 25 であり,これは範囲外である.

3
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 1週間前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 2週間前
ID
JA
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属