カテゴリ: Java 更新日: 2026/01/24

JavaのRandomのnextInt メソッドの使い方を完全ガイド!初心者でもわかる乱数生成

Random のnextInt メソッド
Random のnextInt メソッド

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

生徒

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

先生

「Javaでは、Randomクラスを使うことで簡単に乱数を生成できますよ。」

生徒

「そのRandomクラスってどう使うんですか?」

先生

「それでは、Randomクラスの基本的な使い方を見ていきましょう!」

1. Randomクラスとは?

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

JavaのRandomクラスは、その名の通り「ランダムな値(乱数)」を作るためのクラスです。サイコロの目を決めたり、ガチャの結果を決めたり、ゲーム内で敵の出現位置をランダムにしたりと、「毎回違う結果にしたい」ときに活躍します。Javaで乱数を扱うときの基本となるクラスなので、プログラミング初心者のうちに使い方を押さえておくと、その後の学習がぐっと楽になります。

Randomクラスはjava.utilパッケージに含まれているため、利用する前にimport文で読み込む必要があります。次のように書けば、プログラムの中でRandomクラスを使えるようになります。


import java.util.Random;

実際にどのように使うのか、まずは「とにかくランダムな整数を1つ表示してみる」だけの、シンプルなサンプルプログラムを見てみましょう。


import java.util.Random;

public class RandomIntroExample {
    public static void main(String[] args) {
        // Randomクラスのインスタンスを作成
        Random random = new Random();

        // ランダムな整数を1つ取得
        int value = random.nextInt();

        // 結果を画面に表示
        System.out.println("ランダムな整数: " + value);
    }
}

このプログラムでは、まずRandom random = new Random();で乱数を生成するための「装置」を用意し、random.nextInt()でランダムな整数を1つ取り出しています。どんな値が表示されるかは実行するたびに変わるので、「毎回結果が変わる」という乱数のイメージをつかむのにぴったりなサンプルです。より細かく範囲を指定したり、ゲームのサイコロのように扱ったりする方法は、このあと順番に見ていきます。

2. nextIntメソッドで整数の乱数を生成する

2. nextIntメソッドで整数の乱数を生成する
2. nextIntメソッドで整数の乱数を生成する

前の章でRandomクラスそのものを見てきましたが、ここでは実際に乱数を取り出すときによく使うnextInt()メソッドに焦点を当ててみます。nextInt()は、もっとも基本的な「整数の乱数」を取り出すためのメソッドで、Javaで乱数生成を行うときの出発点になります。

まずは「とりあえず1つランダムな整数を表示してみる」という、プログラミング未経験の方でも動かしやすいシンプルなサンプルから見てみましょう。


import java.util.Random;

public class RandomExample {
    public static void main(String[] args) {
        // Randomクラスのインスタンスを作成
        Random random = new Random();

        // ランダムな整数を1つ取得
        int randomNumber = random.nextInt();

        // 結果を画面に表示
        System.out.println("ランダムな整数: " + randomNumber);
    }
}

実行結果


ランダムな整数: 123456789

実行結果の数字は毎回変わりますが、このようにコンソールに大きな整数が1つ表示されれば成功です。new Random()で「乱数を作るための道具」を用意し、nextInt()でその道具から乱数を1つ取り出し、最後にSystem.out.printlnで画面に出している、という流れになっています。

ここでポイントなのは、nextInt()に何も指定していない場合、生成されるのは「範囲が決まっていない整数の乱数」だということです。0や正の数だけでなく、マイナスの値が出てくることもあります。あとで解説するnextInt(int bound)を使うと「0〜9のように範囲を決めた乱数」が作れるようになりますが、まずはこの基本形で「Javaで乱数を扱うイメージ」をつかんでおくと、次のステップが理解しやすくなります。

3. nextInt(int bound)メソッドで範囲を指定する

3. nextInt(int bound)メソッドで範囲を指定する
3. nextInt(int bound)メソッドで範囲を指定する

nextInt()をそのまま使うと、正の数だけでなく負の数も含む広い範囲の乱数が生成されます。しかし、実際のプログラムでは「0〜9の中から選びたい」「1〜100までの数にしたい」など、範囲を限定したい場面のほうが多いはずです。そんなときに使えるのが、nextInt(int bound)です。

nextInt(int bound)は、指定した数値を上限として「0からbound - 1の間の乱数」を生成します。例えば、10を指定すれば0〜9、6を指定すれば0〜5の乱数が得られます。まずは0〜9の乱数を生成するシンプルな例を見てみましょう。


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

        // 0〜9の乱数を取得
        int randomNumber = random.nextInt(10);

        System.out.println("0から9の間のランダムな整数: " + randomNumber);
    }
}

実行結果


0から9の間のランダムな整数: 7

実行するたびに違う数が表示され、すべて0〜9の範囲に収まります。特定の範囲内でランダムな値を扱えるようになると、抽選機能や乱数でアイテムを決定する処理、配列のランダムアクセスなど実用的な用途が一気に広がります。また、1から始まる数値が欲しい場合は「nextInt(6) + 1」のように値を足して調整することで簡単に実現できます。

4. Randomクラスの注意点

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

Randomクラスは同じシード(初期値)を使うと同じ順番の乱数を生成します。そのため、完全に予測不可能な乱数が必要な場合は、SecureRandomクラスを使用することをおすすめします。


import java.security.SecureRandom;

public class SecureRandomExample {
    public static void main(String[] args) {
        SecureRandom secureRandom = new SecureRandom();
        int secureRandomNumber = secureRandom.nextInt(10); // 0から9までの乱数
        System.out.println("SecureRandomによる乱数: " + secureRandomNumber);
    }
}

実行結果


SecureRandomによる乱数: 3

このように、SecureRandomを使うことでセキュリティに配慮した乱数を生成できます。

5. nextIntを使った簡単なサイコロプログラム

5. nextIntを使った簡単なサイコロプログラム
5. nextIntを使った簡単なサイコロプログラム

最後に、nextInt()メソッドを使ってサイコロを模したプログラムを作成してみましょう。これは、1から6のランダムな整数を出力する簡単な例です。


public class DiceExample {
    public static void main(String[] args) {
        Random random = new Random();
        int diceRoll = random.nextInt(6) + 1; // 1から6までの乱数
        System.out.println("サイコロの目: " + diceRoll);
    }
}

実行結果


サイコロの目: 4

このように、nextInt(6) + 1とすることで、1から6の範囲の乱数を生成できます。

6. nextIntとMath.randomの違いを理解しよう

6. nextIntとMath.randomの違いを理解しよう
6. nextIntとMath.randomの違いを理解しよう

Javaで乱数を生成する方法はRandomクラスだけではありません。Math.random()を使って乱数を生成することもできます。しかし、両者には特徴や使いどころが異なります。

Math.random()は0以上1未満の浮動小数点乱数を生成します。一方、Randomクラスは整数やlong、booleanなど幅広いデータ型の乱数生成が可能です。整数の乱数が必要な場合は、RandomnextInt()を使うのが便利です。

また、Randomクラスはインスタンスを生成して使うため、乱数生成の状態を保持できますが、Math.random()は毎回内部的にRandomクラスを呼び出すため、制御性は低くなります。

用途に応じて使い分けることで、より意図に合った乱数生成が可能になります。

7. nextIntと他の乱数メソッドを組み合わせて使う

7. nextIntと他の乱数メソッドを組み合わせて使う
7. nextIntと他の乱数メソッドを組み合わせて使う

RandomクラスにはnextInt()以外にも多くの乱数生成メソッドが用意されています。例えば、nextBoolean()で真偽値、nextDouble()で浮動小数点の乱数を生成できます。

これらのメソッドを組み合わせれば、ゲームやシミュレーションなど、複雑なランダム処理を実現できます。例えば、乱数でキャラクターのHPを設定し、さらに確率でイベント発生を判定するといった使い方が可能です。

また、nextInt()を複数回呼び出すことで、複数の乱数を管理したり、nextDouble()と組み合わせて確率分布を調整したりと、応用の幅は非常に広いです。

実際のアプリケーション開発では、処理内容に応じて適切なメソッドを選んで活用しましょう。

8. Randomクラスで乱数の再現性を持たせる方法

8. Randomクラスで乱数の再現性を持たせる方法
8. Randomクラスで乱数の再現性を持たせる方法

乱数と聞くと毎回ランダムな結果が得られるイメージがありますが、Randomクラスでは同じシード値を指定するとnextInt()で同じ乱数列を再現できます。この性質はデバッグや検証テストで非常に役立ちます。

例えば、ゲームの敵出現パターンやシミュレーション結果を検証したい場合、固定したシード値を設定して結果を再現することで、バグ調査が容易になります。

一方、シード値を指定しない場合は、現在時刻などをもとに自動生成されるため、毎回異なる乱数結果が得られます。用途に応じてシード値をコントロールすることが大切です。

ただし、セキュリティ目的で乱数を扱う場合は、SecureRandomを使用することが推奨されます。

まとめ

まとめ
まとめ

今回の記事では、JavaのRandomクラスを使った乱数生成の基本から応用までを詳しく解説しました。

要点の振り返り:
1. Randomクラスの基本的な使い方として、整数や小数をランダムに生成する方法を学びました。
2. nextInt()メソッドで範囲を指定してランダムな整数を生成する方法を理解しました。例えば、nextInt(10)を使用すれば、0から9のランダムな整数を取得できます。
3. Randomクラスのシード(初期値)を設定することで、乱数の再現性をコントロールできることも解説しました。
4. セキュリティが求められるケースでは、SecureRandomクラスを使用するのが推奨されることも紹介しました。

乱数はゲームのランダムイベント、パスワード生成、データのランダム抽出など、さまざまな場面で役立ちます。しっかりと理解しておくことで、プログラムの幅を広げることができます。以下にランダムな整数を生成するサンプルプログラムを再掲しますので、復習に活用してください。


import java.util.Random;

public class RandomReview {
    public static void main(String[] args) {
        Random random = new Random();
        int randomNum = random.nextInt(100); // 0から99までの乱数
        System.out.println("0から99のランダムな整数: " + randomNum);
    }
}
    

実行結果


0から99のランダムな整数: 42
    

上記のコードでは、nextInt(100)メソッドを使って0から99の間のランダムな整数を生成しています。このように、必要に応じて範囲を調整することができます。

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

生徒

Randomクラスについてしっかり理解できました!特に、nextInt()で範囲指定できるのが便利ですね。」

先生

「その通りです。範囲指定やシード設定を活用すれば、乱数の用途がさらに広がりますよ。」

生徒

「セキュリティ面でもSecureRandomが使えるのは安心ですね。今後のプログラムに活用したいです!」

先生

「ぜひ実際に使ってみてください。乱数生成はプログラミングの基礎なので、しっかり覚えておきましょう。」

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

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

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

Javaで乱数を生成するには、必ずRandomクラスを使う必要がありますか?

いいえ、Javaでは乱数を生成するためにMath.random()を使うこともできますが、Randomクラスの方が柔軟性が高く、範囲指定や整数・浮動小数点の生成などが簡単に行えるため、初心者にはRandomクラスの使用が推奨されます。

JavaのRandomクラスのnextInt()メソッドはどんなときに使うのですか?

nextInt()メソッドは、Javaプログラムでランダムな整数を生成したいときに使います。ゲームの処理、サイコロの目、ランダムなIDの生成など、あらゆる場面で活用できます。

nextInt(int bound)のboundには何を指定すればいいのですか?

nextInt(int bound)boundには生成したい乱数の上限を指定します。たとえば、nextInt(10)とすれば、0から9までの整数がランダムに生成されます。指定した数値未満までの範囲となることに注意しましょう。

JavaのRandomクラスとSecureRandomクラスの違いは何ですか?

Randomクラスは高速で手軽に乱数を生成できますが、シードが同じなら同じ乱数列を返すため、セキュリティ用途には向きません。一方、SecureRandomクラスは暗号的に安全な乱数を生成するため、パスワードやトークンの生成などに適しています。

Javaでサイコロの目を1から6の間でランダムに出す方法を教えてください。

JavaのRandomクラスを使ってrandom.nextInt(6) + 1とすれば、1から6の範囲でランダムな数値(サイコロの目)を生成できます。+1することで0から始まる乱数を調整しています。

JavaのRandomクラスで負の整数が出ることがあるのはなぜですか?

nextInt()メソッドを引数なしで使うと、int型のすべての範囲(負の数を含む)からランダムに値が生成されるため、負の整数も出力されます。正の数だけを使いたい場合はnextInt(正の数)で範囲を限定しましょう。

Javaで0から99の間のランダムな整数を出すにはどうすればいいですか?

Randomクラスを使ってnextInt(100)とすることで、0から99の間のランダムな整数が得られます。これはJavaで範囲指定された乱数を生成する基本的な方法です。

Javaの乱数で毎回同じ結果が出ることがあるのはなぜですか?

Randomクラスに同じシード値(初期値)を設定した場合、同じ順番の乱数列が生成されるためです。毎回違う結果がほしい場合はシードを設定しないか、時間などに応じたランダムなシードを使いましょう。

JavaのSecureRandomは初心者でも簡単に使えますか?

SecureRandomRandomクラスとほぼ同じように使えるため、初心者でも比較的簡単に使えます。セキュリティを重視したい場合や、安全なトークン生成が必要な場面ではぜひ活用してください。

JavaのRandomクラスを使うときは毎回importが必要ですか?

はい、Randomクラスはjava.utilパッケージに含まれているため、Javaで使用する際はimport java.util.Random;と書いてクラスをインポートする必要があります。

nextInt()とnextDouble()の違いは何ですか?

nextInt()は整数を、nextDouble()は0.0以上1.0未満の小数(浮動小数点数)をランダムに生成するメソッドです。整数がほしい場合はnextInt()、小数がほしい場合はnextDouble()を使い分けます。

Javaの基礎を最初から体系的に学びたい人には、 初心者向けで定評のある定番入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Java
Javaのラムダ式で注意したい変数キャプチャの落とし穴とは?代入と変数名のベストプラクティス解説
更新記事
New2
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説