カテゴリ: Java 更新日: 2026/04/12

JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成

Random クラス
Random クラス

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaでランダムな数を作る方法ってありますか?」

先生

「Javaにはjava.utilパッケージに含まれているRandomクラスがあって、それを使えば簡単に乱数を作れますよ。」

生徒

「乱数ってゲームとか抽選のプログラムでも使われるやつですよね?」

先生

「その通りです。実際にどんな場面で役立つのか、そして使い方を一緒に見ていきましょう。」

1. Randomクラスとは?

「1. Randomクラスとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Randomクラスとは?
1. Randomクラスとは?

JavaのRandomクラスは、プログラムで「ランダムな数」を作りたいときに使われるとても便利な機能です。例えばゲームで敵の出現場所をランダムに決めたり、占いアプリで今日の運勢をランダムに表示したりする場面で活躍します。

ここでいう乱数は、本当に完全なランダムではなく「疑似乱数」と呼ばれるものです。これは一定の計算手順によって作られるランダム風の数で、通常のアプリや学習用途では十分な精度があります。Randomクラスを使うには、最初にimport java.util.Random;を書いておき、必要なときにオブジェクトを作成して使います。

はじめての方でもイメージしやすいように、Randomクラスを使った簡単なサンプルを見てみましょう。


import java.util.Random;

public class SimpleRandomSample {
    public static void main(String[] args) {
        Random random = new Random();      // Randomクラスを準備
        int value = random.nextInt(5);     // 0〜4の乱数を生成
        System.out.println("ランダムな数: " + value);
    }
}

このように、とてもシンプルな書き方でランダムな数字を作れます。特にゲーム、抽選、シミュレーションなど、あらゆるプログラムで役立つので、まずは基本の仕組みを押さえておくと後の理解がぐっと楽になります。

2. Randomクラスの基本的な使い方

2. Randomクラスの基本的な使い方
2. Randomクラスの基本的な使い方

Randomクラスを使うときは、まず最初に「乱数を作るための道具」を用意するイメージでオブジェクトを作成します。初心者の方でも構えずに使えるシンプルな仕組みで、どんな処理でも同じ手順でスタートできます。実際に数字をランダムに取り出す流れを見てみましょう。


import java.util.Random;

public class RandomExample {
    public static void main(String[] args) {
        Random random = new Random();           // Randomクラスを用意
        int number = random.nextInt(10);        // 0〜9の乱数を取得
        System.out.println("生成された乱数: " + number);
    }
}

nextInt(10)と書くと、必ず0以上9以下の整数が返ってきます。何度実行しても、同じ数字が続くこともあれば、毎回違う数字になることもあり、まさに「ランダムらしい動き」を体験できます。


生成された乱数: 7

特に初学者がつまずきやすいポイントとして「なぜnew Random()が必要なのか?」がありますが、これは“乱数を作る機械を起動する”意味だと思ってください。一度作れば、あとは好きなだけ乱数を取り出せるので、ゲーム作成や簡単なシミュレーションの基礎としてとても重要なステップになります。

3. 代表的なメソッド一覧

3. 代表的なメソッド一覧
3. 代表的なメソッド一覧

Randomクラスには、いろいろな種類の乱数を作るためのメソッドがそろっています。ここでは、よく使われるメソッドの名前と「どんなときに使うのか」をセットで押さえておくことで、Javaの乱数生成の全体像がつかみやすくなります。

  • nextInt():int型の整数の乱数を返します。引数なしの場合は、負の数も含む広い範囲からランダムに値が選ばれます。
  • nextInt(int bound):0以上bound未満の整数を返します。nextInt(10)なら0〜9のように、範囲を決めたいときによく使います。
  • nextDouble():0.0以上1.0未満の小数(double型)を返します。確率や割合を計算するときの「0.0〜1.0のランダムな値」が欲しい場面で便利です。
  • nextBoolean():trueかfalseをランダムに返します。はい/いいえの二択や、処理を実行するかしないかをランダムに決めたいときに使えます。
  • nextLong():long型の大きな整数の乱数を返します。より広い範囲の整数が必要なときに利用します。
  • nextFloat():0.0以上1.0未満の小数(float型)を返します。doubleよりも少ないメモリで小数を扱いたいときに選びます。

どのメソッドも、基本的な使い方は同じで、まずRandom random = new Random();と書いてRandomクラスのオブジェクトを作り、そのあとでrandom.nextInt(...)random.nextDouble()のように呼び出します。プログラミング未経験の方は「randomという箱から、欲しい形の数字を取り出す」とイメージすると分かりやすいでしょう。


import java.util.Random;

public class RandomMethodsExample {
    public static void main(String[] args) {
        Random random = new Random();

        int intValue = random.nextInt(10);   // 0〜9の整数
        double doubleValue = random.nextDouble(); // 0.0〜1.0未満の小数
        boolean boolValue = random.nextBoolean(); // true または false

        System.out.println("整数の乱数: " + intValue);
        System.out.println("小数の乱数: " + doubleValue);
        System.out.println("真偽値の乱数: " + boolValue);
    }
}

上のサンプルでは、Randomクラスから3種類の乱数を取り出しています。実行するたびに、表示される整数・小数・true/falseの組み合わせが変わるので、「乱数が毎回変わる」というイメージをつかむ練習になります。Javaで乱数を使ったプログラムを書くときは、まずここで紹介した代表的なメソッドを押さえておくと、その後の応用もスムーズに進めやすくなります。

4. nextIntの具体例

「4. nextIntの具体例」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. nextIntの具体例
4. nextIntの具体例

特定の範囲の乱数を作りたいときによく使うのがnextInt(int bound)です。前の章では「0〜9」の乱数を作りましたが、「1〜6のサイコロの目」や「1〜100のくじ番号」のように、現実に近い値の範囲を扱いたい場面も多くあります。ここでは、サイコロを例にしてnextIntの使い方を少し丁寧に見ていきましょう。


import java.util.Random;

public class DiceExample {
    public static void main(String[] args) {
        Random random = new Random();

        // 1回だけサイコロを振る
        int dice = random.nextInt(6) + 1; // 1から6の乱数
        System.out.println("サイコロの目: " + dice);
    }
}

サイコロの目: 4

このコードでは、まずnew Random()で乱数を作る準備をし、そのあとnextInt(6)で「0〜5」のどれかの数字をランダムに取り出しています。サイコロは「1〜6」なので、そのままだと1が足りません。そこで+ 1をして、「0〜5」だったものを「1〜6」にずらしている、というイメージです。

もう少し一般的に言うと、「最小値minから最大値maxまで」の乱数が欲しいときは、random.nextInt(max - min + 1) + minという形で書けます。例えば1〜100ならnextInt(100) + 1、10〜20ならnextInt(11) + 10といったように、範囲の幅と開始位置を組み合わせて考えると分かりやすくなります。


import java.util.Random;

public class RangeExample {
    public static void main(String[] args) {
        Random random = new Random();

        int oneToHundred = random.nextInt(100) + 1; // 1〜100
        int tenToTwenty = random.nextInt(11) + 10;  // 10〜20

        System.out.println("1〜100の乱数: " + oneToHundred);
        System.out.println("10〜20の乱数: " + tenToTwenty);
    }
}

実際に何度か実行してみると、毎回違う値が表示されることが体感できるはずです。ゲームのダメージ量を少しだけランダムにしたり、くじ引きの当選番号を決めたりするなど、JavaのRandomクラスとnextIntを組み合わせることで、身近な「ランダムな挙動」をプログラムの中で再現できるようになります。

5. nextDoubleの使い方

5. nextDoubleの使い方
5. nextDoubleの使い方

小数を扱いたいときにはnextDouble()を使います。0.0以上1.0未満のランダムな小数が返されるので、確率の計算やグラフィック処理などにも応用できます。


import java.util.Random;

public class DoubleExample {
    public static void main(String[] args) {
        Random random = new Random();
        double value = random.nextDouble();
        System.out.println("生成された小数: " + value);
    }
}

6. nextBooleanの使い方

6. nextBooleanの使い方
6. nextBooleanの使い方

nextBoolean()はtrueかfalseをランダムに返すので、コイントスのような処理に使えます。


import java.util.Random;

public class CoinToss {
    public static void main(String[] args) {
        Random random = new Random();
        boolean toss = random.nextBoolean();
        if (toss) {
            System.out.println("表が出ました");
        } else {
            System.out.println("裏が出ました");
        }
    }
}

7. シード値と再現性

「7. シード値と再現性」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. シード値と再現性
7. シード値と再現性

Randomクラスには「シード値」という仕組みがあります。シード値を指定すると、毎回同じ乱数の並びを再現できます。これはテストやデバッグで非常に便利です。


import java.util.Random;

public class SeedExample {
    public static void main(String[] args) {
        Random random1 = new Random(12345);
        Random random2 = new Random(12345);
        System.out.println(random1.nextInt(100));
        System.out.println(random2.nextInt(100));
    }
}

同じ乱数が出力される

上記の例では、同じシード値を指定しているので、どちらのオブジェクトからも同じ数が生成されます。

8. Math.randomとの違い

8. Math.randomとの違い
8. Math.randomとの違い

JavaではMath.random()もよく使われますが、これは内部的にRandomクラスを利用しています。違いとしては、Math.random()は簡単に書ける反面、シードを制御したい場合やより複雑な処理をしたい場合にはRandomクラスを使うのが一般的です。

9. 応用例:配列からランダムに要素を選ぶ

9. 応用例:配列からランダムに要素を選ぶ
9. 応用例:配列からランダムに要素を選ぶ

Randomクラスを使えば、配列やリストからランダムに要素を選ぶことも可能です。


import java.util.Random;

public class ArrayPick {
    public static void main(String[] args) {
        String[] fruits = {"りんご", "みかん", "ぶどう", "バナナ"};
        Random random = new Random();
        String choice = fruits[random.nextInt(fruits.length)];
        System.out.println("選ばれた果物: " + choice);
    }
}

10. Randomクラスの注意点

「10. Randomクラスの注意点」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

10. Randomクラスの注意点
10. Randomクラスの注意点

Randomクラスはあくまで疑似乱数であるため、暗号処理やセキュリティが重要な場面では使ってはいけません。その場合はSecureRandomクラスを使います。初心者の学習や一般的なプログラムではRandomで十分ですが、安全性が必要なシステムでは注意しましょう。

まとめ

まとめ
まとめ

今回の記事ではJavaのRandomクラスを使った乱数生成の基本から応用までを体系的に学びました。乱数はゲームプログラム、テストデータの作成、シミュレーション、さらには暗号学的な処理など、幅広い場面で必要とされる機能です。初心者にとっては一見難しそうに感じるかもしれませんが、実際にはRandomクラスをインポートし、インスタンスを生成してメソッドを呼び出すだけで簡単に乱数を利用できることを理解できたと思います。

特にnextInt()を使えば整数乱数、nextDouble()nextFloat()を使えば小数乱数、nextBoolean()で真偽値を生成できる点は、実際の開発に直結する重要な知識です。さらに、ガウス分布に従う乱数を返すnextGaussian()など、統計的な処理や機械学習のサンプル生成でも役立つメソッドが用意されています。

よくあるエラーとしてnextInt(0)を呼び出したときに例外が発生するケースも紹介しました。引数にゼロを指定してはいけないという仕様を理解しておくことは、安定したプログラム作成の基本です。また、単純な一様乱数だけでなく、偏りや分布を意識することも大切であり、必要に応じてSecureRandomや外部ライブラリを検討する必要があることも覚えておきましょう。

以下に、応用例として「サイコロを振るプログラム」のサンプルを示します。この例はnextInt()を使って1から6の範囲の整数乱数を生成し、結果を出力します。


import java.util.Random;

public class DiceRoll {
    public static void main(String[] args) {
        Random random = new Random();

        // 1から6までの乱数を生成
        int dice = random.nextInt(6) + 1;

        System.out.println("サイコロの出目は: " + dice);
    }
}

サイコロの出目は: 4

このようにプラス1を加えることで、範囲を0から始めるのではなく任意の値から開始できます。サイコロやカードゲームのシミュレーション、クイズのランダム出題など、多彩なプログラムに応用できます。

また、テストデータを自動生成するときにもRandomクラスは強力な味方になります。例えば、ユーザーIDやパスワードの候補をランダムに作る、ランダムな配列を生成してソート処理の検証に利用する、といった使い方が可能です。こうした小さな実験を繰り返すことで、プログラミングスキルは確実に伸びていきます。

初心者が意識しておくべき大事な点は、「ランダム値の範囲を正しく指定する」「偏りが生じる場合は分布を考える」「必要に応じて暗号学的乱数生成を使う」という三点です。これらを理解しておけば、Javaの乱数生成を安全かつ正確に使えるようになります。

先生と生徒の振り返り会話

生徒 「今日の学びで、JavaのRandomクラスを使えば整数も小数も簡単に乱数を作れることが分かりました!」

先生 「その通りです。サイコロやくじ引き、テストデータの作成など、幅広い場面で応用できますよ。」

生徒 「範囲を設定するにはnextInt(6) + 1のようにすればいいんですね。サイコロの出目のシミュレーションにぴったりだと思いました。」

先生 「とても良い理解ですね。範囲指定の工夫を覚えれば、実務でもすぐ役立ちます。」

生徒 「あと、ゼロを引数にするとエラーになる点も注意しなきゃいけないんですね。」

先生 「はい。仕様を正しく知っていれば未然に防げるエラーです。初心者のうちに覚えておくと安心です。」

生徒 「ガウス分布の乱数を出すnextGaussian()も気になりました。これって機械学習の実験とかで使えそうですね。」

先生 「その通りです。統計的な処理やシミュレーションでは欠かせないメソッドですから、ぜひ試してみてください。」

生徒 「次はSecureRandomも勉強して、安全な乱数生成にも挑戦したいです!」

先生 「素晴らしい意欲です。今回のRandomクラスの学びが、次のステップにつながりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaで乱数を作るにはRandomクラスだけを使えばいいのですか?

基本的な乱数生成にはRandomクラスで十分ですが、セキュリティ性が求められる処理ではSecureRandomの使用が推奨されます。

JavaのRandomクラスとMath.random()の違いは何ですか?

Math.random()は静的メソッドで手軽ですが、シード値の制御や詳細な乱数制御が難しいため、柔軟性のあるRandomクラスが一般的に使われます。
カテゴリの一覧へ
新着記事
New1
Java
JavaのThreadクラスholdsLockメソッド完全ガイド!初心者でもわかる同期とロックの確認方法
新規投稿
New2
Spring
SpringDataJPAのJPAクエリメソッド「NotIn」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「In」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Not」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとVS Codeで開発を始めよう!拡張機能・launch.json・ホットリロードを丁寧に解説
No.2
Java&Spring記事人気No2
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.3
Java&Spring記事人気No3
Spring
Spring Data JPAのfindAllメソッドの使い方を完全ガイド!検索結果をThymeleafのth:eachで表示
No.4
Java&Spring記事人気No4
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.5
Java&Spring記事人気No5
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.6
Java&Spring記事人気No6
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Spring
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ