【簡単理解】Javaでの乱数の使い方まとめ

java乱数
  • このエントリーをはてなブックマークに追加
  • Pocket

Javaで乱数を使う機会は多い。

例えばパスワードをランダムで発行したいとき、例えばスロットやおみくじなどのランダム要素をプログラムに追加したいとき、乱数を使う必要がある。

このページではJavaで乱数を使う方法についてまとめている。初心者の方でもすぐに使えるように、簡単にまとめた。参考にして頂ければと思う。

そもそも乱数とは?

乱数とは?

乱数とは次にどのような値が出るのかわからない数字のことだ。サイコロを思い出してもらえればわかりやすい。サイコロには1~6までの値があるが、振ってみないとどの目が出るのかわからない。これが乱数だ。

Javaで扱う乱数は整数だけではない。double型など小数点のある数値や、boolean型なども乱数として扱うことができる。

乱数はパスワードの暗号化などセキュリティに関する処理で使用されることが多い。また、カードゲームやアクションゲームなどのゲームアプリ全般でも、ゲーミング要素を高めるために乱数の使用は必須だ。乱数の生成処理は幅広く使われているので、基本をしっかり押さえておこう。

詳細はいいからとにかく乱数を出したい!という方

下記のようにMathクラスを使って出力を試してみよう。

Math.random();

上記を実行すると、0.0~1.0未満の範囲でdouble型の乱数を取得できる。

例えば、10種類の数字が出る乱数を作りたいとき、次のような手順を取ればいい。

  • 上のメソッドで乱数を出す
  • 10倍する(5種類だったら5倍、100種類だったら100倍)
  • 整数型にする(intにキャストする)

以上だ。

1未満の数字がランダムで出るので、例えば10倍したら「0〜9」の数字が出るようになる。同じ理屈で、5個のランダム数字を作りたければ5倍にすればいいし、サイコロを作りたければ6倍すればいい。

それでは、詳細をご紹介していく。

乱数に関するクラスの種類

Javaプログラミングにおいて、乱数を生成する時に使用する代表的なクラスは以下の通りだ。

クラス

内容

java.util.Random

乱数を生成する

java.lang.Math

基本的な数値処理を実行する 

Randomクラス(java.util.Random)

Randomクラスはさまざまな型で乱数を作ることができるクラスだ。Randomクラスでの乱数生成はシード(種)と呼ばれる値をもとに、乱数ジェネレータから生成されている。

主なコンストラクタ

Random()

内容

新しい乱数ジェネレータを作成する。このコンストラクタではシードが省略されているので、シードとして現在時刻が使用される。

Random(long seed)

内容

long型のシードを指定して、新しい乱数ジェネレータを作成する。

主なメソッド

nextInt()

戻り値の型

int

内容

int型が取り得る範囲でのint型乱数を取得する。

nextInt(int value)

戻り値の型

int

内容

0~value-1までの範囲内のint型の乱数を取得する。

乱数の生成する範囲の指定もできる。

詳細は後で紹介するサンプルプログラムを見て欲しい。

nextLong()

戻り値の型

long

内容

long型が取り得る範囲でのlong型の乱数を取得する。

nextDouble()

戻り値の型

double

内容

0.0~1.0の範囲でdouble型の乱数を取得する。

nextFloat()

戻り値の型

float

内容

0.0~1.0の範囲でfloat型の乱数を取得する。

nexBoolean()

戻り値の型

boolean

内容

真(true)または偽(false)型の乱数を取得する。

サンプルプログラム

実行結果

サンプルプログラムの説明

それでは簡単にサンプルプログラムを説明しよう。

  • [1]Randomクラスのコンストラクタ。シードの指定はなし。
  • [2]int型の乱数を生成している。
  • [3]int型の乱数を生成している。[2]とは異なる値が生成されたが、乱数なので同じ値が生成されることもある。
  • [4]0~99までの乱数を生成している。
  • [5]100~199までの乱数を生成している。nextInd(value)+100なら、100~value - 1までの乱数。random.nextInd(value)+1000なら、1000~value - 1までの乱数になる。
  • [6]long型の乱数を生成している。
  • [7]double型の乱数を生成している。
  • [8]float型の乱数を生成している。
  • [9]boolean型の乱数を生成している。
  • [10]Randomクラスのコンストラクタ。シードを指定して生成している。
  • [11]int型の乱数を生成している。
  • [12]int型の乱数を生成している。[11]とは異なる値が出力された。
  • [13]Randomクラスのコンストラクタ。先ほどと同じシードを指定して生成している。
  • [14]int型の乱数を生成しているが、同じシードを指定したRandomクラスなので[11]と同じ値が出力されている。
  • [15]同じシードなので、2回目の乱数生成でも[12]と同じ値が出力されている。

シードの指定に注意

サンプルプログラムでも説明したが、シードを指定して乱数を生成する場合、同じシード値だと毎回同じ値が出力される。

サンプルプログラムではnextInt()メソッドでの出力のみ確認したが、他のいずれのメソッドでも同じ値が出力される。シードを指定する場合は注意が必要だ。 

Mathクラス(java.lang.Math)

Mathクラスは指数関数や三角関数などの数値処理を行うクラスだ。このクラスにも乱数を生成するメソッドがあるので紹介しておこう。 

主なメソッド

random()

戻り値の型

double

内容

0.0~1.0未満の範囲でdouble型の乱数を取得する。

サンプルプログラム

実行結果 

サンプルプログラムの説明 

こちらのサンプルプログラムも簡単に説明しよう。

  • [1]double型の乱数を生成している。
  • [2]double型の乱数を生成している。[1]とは異なる値が出力されている。
  • [3]生成した乱数をint型で取得している。生成した乱数に10を掛けることで、0~9までの乱数が生成できる。
  • random()メソッドの戻り値はdouble型なので、int型にキャストする必要がある。
  • [4]こちらもint型で取得している。

まとめ

Javaでの乱数の使い方についてまとめてきたがいかがだっただろうか?

様々なメソッドがあるので、場合によって使い分けて乱数に対応していただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*