1. 概要

このチュートリアルでは、範囲内で乱数を生成するさまざまな方法について説明します。

2. 範囲内の乱数の生成

2.1. Math.random

Math.random は、0.0以上1.0未満のランダムなdouble値を提供します。

Math.random メソッドを使用して、指定された範囲 [min、max)で乱数を生成してみましょう。

public int getRandomNumber(int min, int max) {
    return (int) ((Math.random() * (max - min)) + min);
}

なぜそれが機能するのですか? Math.random が0.0を返すとどうなるか見てみましょう。これは、可能な限り低い出力です。

0.0 * (max - min) + min => min

したがって、取得できる最小の数値はminです。

1.0はMath.randomの排他的な上限であるため、次のようになります。

1.0 * (max - min) + min => max - min + min => max

したがって、メソッドの戻り値の排他的な上限はmaxです。

次のセクションでは、この同じパターンが Random#nextIntで繰り返されるのを確認します。

2.2. java .util.Random.nextInt

java.util.Randomのインスタンスを使用して同じことを行うこともできます。

java .util.Random.nextInt メソッドを使用して、乱数を取得しましょう。

public int getRandomNumberUsingNextInt(int min, int max) {
    Random random = new Random();
    return random.nextInt(max - min) + min;
}

min パラメーター(原点)は包括的ですが、上限maxは排他的です。

2.3. java .util.Random.ints

java.util.Random.ints メソッドは、ランダムな整数のIntStreamを返します。

したがって、 java.util.Random.ints メソッドを利用して、ランダムな数値を返すことができます。

public int getRandomNumberUsingInts(int min, int max) {
    Random random = new Random();
    return random.ints(min, max)
      .findFirst()
      .getAsInt();
}

ここでも、指定された原点 min は包括的であり、maxは排他的です。

3. 結論

この記事では、範囲内で乱数を生成する別の方法を見ました。

コードスニペットは、いつものように、GitHubにあります。