質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

3861閲覧

Java 乱数生成

rion

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2014/08/14 06:12

Javaで、特定の範囲内の値から乱数を生成しようとしています。

例えば範囲が5-10としたら、乱数が取ってくることのできる最小の数が5、最大の数が10、且つ5と10の間のどの数字にでもなれるようにしたいのですが、どう実装したらいいかわからず困っています。

ある特定の範囲内の乱数を返すようなAPIはあるのでしょうか?
下記のような実装を試してみたのですが、上手くいきませんでした。
※ minが最小値、maxが最大値

処理A:
`
num = min + (int)(Math.random()*max);

`
→この場合、numにmaxよりも大きな値が取れてしまう。

処理B:
Random random = new Random(); int i = max - min + 1; int j = random.nextInt() % i; num = min + j;
→この場合、numにminより小さい値が取れてしまう。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

google で "java random" で検索した結果のページから、次のものを見つけました。

乱数の作成

...
10~19などの0からはじめたくない場合は、生成した乱数に開始したい整数をプラスすることで実現できます。
...

乱数を取得する

...
Randomクラス主要メソッド
nextInt(int i) 0 ~ i-1 の範囲で乱数を取得する
...

こういった情報を自分で検索し、その情報をもとにコードを作ってみて、自分で動作確認する
ということができるようになると 作業効率が上がると思います。

投稿2014/08/15 07:47

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rion

2014/08/20 00:44

プラスするのは確かに!って納得しました!分かりやすい回答ありがとうございました!
guest

0

標準的なやり方は、takeda.dさんとkatoyさんのお書きになった内容の通りです。

どうしてもnからmまで(5~10)の乱数を得る、のように直観的なメソッドが欲しいときには、Apache Commons Math のnextIntを使う手もあります。
RandomDataGenerator (Apache Commons Math 3) ※英語

投稿2014/08/15 13:03

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下コードで実現できるかと思います。
`
min + (int)(Math.random() * ((max - min) + 1))

`
ここでやっている内容を説明すると、
まずMath.random()の仕様として、(0,1)の範囲のdouble型の値を生成します。
※この範囲には1を含まないということに注意してください

指定の値の範囲を得るために、まず値の範囲を乗算し、欲しい値の範囲に拡張してみてください。
Math.random() * ( max - min )
そうすると、[0,max-min]という範囲の値が返されます。
範囲内の最小値を取る為に、minの値を足します。
min + (Math.random() * (max - min))
これでmin値〜max値という範囲の値を得ることができます。
しかし、この状態ではまだ最大値が含まれず、double型の値を取ってきてしまいます。
最大値を含めるために範囲を算出する部分の(max - min)に1を足し、小数部分をキャストで切捨てて整数にする必要があります。
`
min + (int)(Math.random() * ((max - min) + 1))

これでOKです。 質問例の5〜10を当てはめると、以下のような式になります。
5 + (int)(Math.random() * ((10 - 5) + 1))
`

投稿2014/08/15 02:30

takeda.d

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問