【簡単理解】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型の乱数を取得する。

nextBoolean()

戻り値の型

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

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

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. カデルアヌパ より:

    math.random import.java.util.scanner を使ってnumberを生成できますか。
    迷てしまいました。

    1. リカレントテクノロジー より:

      いつもご愛読いただきありがとうございます。

      math.random と import.java.util.scanner ということですので、キーボードからの入力と乱数を組み合わせる、例えばシード値をキーボードから入力した上でそれを元に乱数を生成する、というような処理でしょうか?
      もしくは、キーボードから何か入力をするたびに自動的に乱数が生成されて画面に表示される、というような処理でしょうか?

      お手数ですがご教示ください。よろしくお願いいたします。

  2. nisini より:

    nexBoolean()ではなくnextBoolean()では?

    1. リカレントテクノロジー より:

      ご指摘いただきありがとうございます。
      該当箇所の脱字修正いたしました。

      引き続き、ご愛読のほど、よろしくお願いいたします。

リカレントテクノロジー へ返信する コメントをキャンセル

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する