JavaのMath.random()メソッド徹底解説!乱数生成の基本から範囲指定まで
JavaのMath.random()メソッドは、0.0以上1.0未満の擬似乱数(疑似ランダムな数値)を生成するためのメソッドです。生成された乱数に別の数値を掛けることで、0〜1以外の任意の範囲の乱数を取得することもできます。結果が0になることはあっても、1以上になることはありません。
プログラミングで乱数が必要になる場面
プログラミングをしていると、ランダムな数値を生成したい場面によく出会います。例えば、クルーズ船会社を運営しているとしましょう。顧客の注文番号として使う予約参照番号をランダムに生成したり、数当てゲーム用のランダムな数字を作りたいといったケースが考えられます。
Javaには、乱数を生成するための方法がいくつか用意されています。本記事では、その中でも最も一般的に使われるMath.random()メソッドについて、具体的なコード例とともにわかりやすく解説していきます。
Java Mathクラスとは
JavaのMathクラスには、数値に対して数学的な処理を行うための機能が多数含まれています。例えば、数値を四捨五入するround()メソッドや、べき乗を計算するpow()メソッドなどが代表的です。
JavaのMathライブラリを使用するには、まずコードにインポート文を記述します。
import java.lang.Math;
本記事では、このMathライブラリの中からMath.random()メソッドを使っていきます。
Math.random()メソッドの基本
JavaのMath.random()メソッドは、擬似乱数を生成するために使用されます。擬似乱数とは、ランダム性をシミュレートする数式によって作り出された数値のことです。生成される数値は0.0以上1.0未満であり、つまり常に0から1の間の浮動小数点数(double型)となります。
randomメソッドは、浮動小数点値を格納するためのデータ型である「double型」の値を返します。
Math.random()の基本的な使い方
実際にMath.random()メソッドを使ったサンプルコードを見てみましょう。
import java.lang.Math;
class Main {
public static void main(String[] args) {
double number = Math.random();
System.out.println("Random number: " + number);
}
}
このコードを実行すると、以下のような出力が得られます。
Random number: 0.4728164736886452
ご覧のとおり、プログラムは0から1の間のランダムな数値を返しました。しかし、このままの形式では実用的とは言えません。例えば数当てゲーム用の乱数を生成したい場合、小数ではなく整数が必要になるはずです。
整数の乱数を生成する方法
擬似乱数から整数を作り出すには、生成した乱数に別の数値を掛け算し、整数にキャスト(型変換)します。例えば、1から10の間のランダムな整数を生成したい場合は、次のようにコードを書きます。
class Main {
public static void main(String[] args) {
int number = (int)(Math.random() * 10);
System.out.println("Random number: " + number);
}
}
このプログラムを3回実行した結果は以下のとおりです。
4
6
2
プログラムがランダムな整数(whole number)を返していることが確認できます。
コードの内容を分解して見てみましょう。まず、プログラムのコードを格納するMainクラスを宣言します。次に、Math.random()メソッドで乱数を生成し、それに10を掛けます。掛け算の結果をint型にキャストすることで、小数点以下が切り捨てられ、整数になります。最後の行では、「Random number: 」というメッセージと、プログラムが生成した乱数をコンソールに出力しています。
より大きな数値を生成したい場合は、コード内の「* 10」の部分を別の数値に置き換えるだけです。例えば、1から1000の間の乱数を生成したい場合は、次のようにします。
class Main {
public static void main(String[] args) {
int number = (int)(Math.random() * 1000);
System.out.println("Random number: " + number);
}
}
このプログラムを3回実行すると、以下のような結果が返されました。
181
914
939
指定した範囲内の乱数を生成する方法
Math.random()メソッドは引数を受け取らないため、生成される数値の範囲を直接制御することはできません。しかし、独自のメソッドを作成すれば、特定の範囲内の乱数を簡単に生成できます。
例えば、クルーズ船会社で顧客の注文を識別するための乱数を生成するアプリを開発しているとしましょう。この番号は顧客名の末尾に付加されます。ここで、200から500の間の乱数を生成したい場合、次のようなコードが使えます。
class Main {
public static int generateTicketNumber(int min, int max) {
int range = (max - min) + 1;
return (int)(Math.random() * range) + min;
}
public static void main(String args[]) {
String customerName = "JohnMcIver";
int randomNumber = generateTicketNumber(200, 500);
System.out.println(customerName + randomNumber);
}
}
このコードを実行すると、以下のような出力が得られます。
JohnMcIver321
このプログラムでは、200から500の範囲内の乱数を生成し、その数値を顧客名に連結してコンソールに出力しています。
コードの仕組みを解説
- まず、minとmaxという2つの引数を受け取る
generateTicketNumber()メソッドを宣言します。 generateTicketNumber()メソッドは、minとmaxの値をもとに、Math.random()を使ってその範囲内の乱数を生成します。「(max - min) + 1」で範囲の幅を計算し、乱数に掛けた後にminを足すことで、指定範囲内の整数が得られます。- mainメソッドが実行されると、
customerNameという変数が宣言され、値「JohnMcIver」が代入されます。 - 続いて、
generateTicketNumber()メソッドが引数200と500を指定して呼び出されます。これらはそれぞれ、生成される乱数の最小値と最大値に対応します。メソッドの戻り値は変数randomNumberに代入されます。 - 最後に、顧客名と生成された乱数が連結され、コンソールに出力されます。
まとめ
JavaのMath.random()メソッドは、擬似乱数を生成するための便利なメソッドです。Math.random()は0以上1未満の数値を返し、これに加工を加えることで任意の範囲の乱数に変換できます。
本記事では、JavaのMathライブラリの基本と、Math.random()メソッドを使った乱数の生成方法を解説しました。さらに、独自メソッドと組み合わせることで、指定した2つの数値の範囲内で乱数を生成するテクニックも紹介しました。
これであなたも、プロのようにJavaで乱数を生成できるようになりました。ぜひ実際の開発で活用してみてください。
-
Android SQLiteでrandom()を使う方法を初心者向けに解説【サンプルコード付き】
はじめに:AndroidにおけるSQLiteデータベースとは本題に入る前に、AndroidにおけるSQLiteデータベースについて簡単に確認しておきましょう。SQLiteはオープンソースのSQLデータベースで、データをデバイス上のテキストファイルとして保存します。Androidには標準でSQLiteデータベースの実装が組み込まれており、リレーショナルデータベースの機能をすべてサポートしています。JDBCやODBCのような接続設定を確立する必要はなく、手軽にデータベースへアクセスできるのが大きな特徴です。この記事では、SQLiteのrandom()関数を使って、テーブル内のレコードをランダムな順
-
Homebrew(Brew)でMacにJavaをインストールする方法【バージョン切り替えも解説】
Macでは、複数のバージョンのJavaを共存させることができます。 この記事では、Homebrewを使ってMacにJavaをインストールする方法と、Java 8、Java 11、Java 13など異なるバージョンを自由に切り替える方法を解説します。 前提条件 作業を始める前に、MacにHomebrewがインストールされていることを確認してください。まだインストールしていない場合は、ターミナルで以下のコマンドを実行してください。 $ ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/ins