特定の範囲での乱数の生成

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Java は、Math クラスと Random クラスの中に、乱数を生成するためのいくつかの組み込みメソッドを提供しています。ただし、特定の範囲内の乱数を生成することは難しい場合があります。この実験では、以下の方法を含む、特定の範囲内の乱数を生成するさまざまな方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/BasicSyntaxGroup -.-> java/output("Output") java/BasicSyntaxGroup -.-> java/math("Math") java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/FileandIOManagementGroup -.-> java/stream("Stream") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") subgraph Lab Skills java/output -.-> lab-117409{{"特定の範囲での乱数の生成"}} java/math -.-> lab-117409{{"特定の範囲での乱数の生成"}} java/method_overloading -.-> lab-117409{{"特定の範囲での乱数の生成"}} java/classes_objects -.-> lab-117409{{"特定の範囲での乱数の生成"}} java/stream -.-> lab-117409{{"特定の範囲での乱数の生成"}} java/math_methods -.-> lab-117409{{"特定の範囲での乱数の生成"}} end

Math クラスを使った乱数生成器

0 から 1 の間の float 値を生成するために、Math.random() メソッドを使用することができます。これは乱数を生成するのに適しています。しかし、特定の範囲内の float 値を生成することは難しい場合があります。

この方法では、Math.random() メソッドの式を利用して、minmax の間(min を含み、max を含まない)の乱数を生成します。

以下はコードサンプルです。

public static int randomNumberGenerator(int min, int max) {
    double r = Math.random();
    int randomNum = (int) (r * (max - min)) + min;
    return randomNum;
}

このメソッドを使用するには、randomNumberGenerator() メソッドを使用して、最小値と最大値の整数引数を渡します。このメソッドは、その範囲内の乱数を返します。

以下は、randomNumberGenerator() を使用して 2 つの乱数を生成するコードです。最初の乱数は 5 から 105 の範囲内で、2 番目の乱数は 2199 から 2200 の範囲内である必要があります。

int r1 = randomNumberGenerator(5, 105);
int r2 = randomNumberGenerator(2199, 2200);

このメソッドを実行するには、ターミナルで以下のコマンドを実行します。

$ cd project
$ touch RandomNumbers.java
// コードを貼り付ける
$ javac RandomNumbers.java
$ java RandomNumbers

Random クラスを使った乱数生成器

指定された範囲内の乱数を生成する別の方法は、Random クラスの nextInt() メソッドを使用することです。

nextInt() メソッドは、[0, n) の範囲内の整数値を生成します。

public static int randomNumberGenerator(int min, int max) {
    Random r = new Random();
    int randomNum = r.nextInt(max - min) + min;
    return randomNum;
}

このメソッドは、minmax のパラメータを受け取り、指定された範囲内の乱数を返します。このメソッドでは、nextInt() は 0 から (max - min) の間の乱数を生成し、その後、最終的な乱数を取得するために min 値を加算します。

以下は、randomNumberGenerator() を使用して 2 つの乱数を生成するコードです。最初の乱数は 500 から 2000 の範囲内で、2 番目の乱数は 500 から 501 の範囲内である必要があります。

int randomNum1 = randomNumberGenerator(500, 2000);
int randomNum2 = randomNumberGenerator(500, 501);

このメソッドを実行するには、ターミナルで以下のコマンドを実行します。

$ cd project
$ touch RandomNumbers.java
// コードを貼り付ける
$ javac RandomNumbers.java
$ java RandomNumbers

Random クラスの ints() メソッドを使用する

Random クラスの ints() メソッドを使用して、特定の範囲内の乱数のストリームを生成することもできます。

ストリームを生成するコードは以下の通りです。

Random r = new Random();
IntStream stream = r.ints(5, 100, 120);

ここで、ints() メソッドは 3 つのパラメータを取ります。最初の count パラメータは、生成したい整数の数を定義し、bound パラメータは範囲を定義します。たとえば、私たちのコードでは、bound パラメータは 100 から 120 までです。これは、最小値(100)を含み、最大値(120)を含まないパラメータです。

このストリームを作成した後、forEach() を使用して消費するか、List や配列などのコレクションに収集することができます。

以下は、ints() メソッドを使用して 150 から 2000 の間の 5 つの乱数を生成するコードです。

int min = 150; //最小範囲を定義
int max = 2000; //最大範囲を定義

Random r = new Random();
IntStream stream = r.ints(5, min, max);//乱数のストリームを生成
int randomNum = stream.findFirst().getAsInt();//ストリームから最初の値を取得

System.out.print("The random number is: " + randomNum);//乱数を出力

このメソッドを実行するには、ターミナルで以下のコマンドを実行します。

$ cd project
$ touch RandomNumbers.java
// コードを貼り付ける
$ javac RandomNumbers.java
$ java RandomNumbers

まとめ

Java で特定の範囲内の乱数を生成することは、いくつかのアプリケーションにとって不可欠です。この実験では、Math.random()、Random.nextInt()、Random.ints() など、特定の範囲内の乱数を生成するいくつかの方法を学びました。各方法にはそれぞれ利点と欠点があり、最適な方法を選択する必要があります。