JavaRush /Java Blog /Random-JA /指定された範囲で乱数を生成します
L2CCCP
レベル 9

指定された範囲で乱数を生成します

Random-JA グループに公開済み
画面の向こうからこんにちは。私たちの誰もが、遅かれ早かれ、実数であれ整数であれ、指定された範囲で乱数を生成する必要に遭遇することがあります。 指定された範囲 - 1 の乱数を生成します。何のために?実際、これは重要ではなく、何らかのイベントをトリガーする確率を計算したり、ランダムな乗数を取得したりするための関数である可能性があります。それで、なぜこれが必要なのか、つまり何にでも必要なのかを理解しました:) 実際、疑似乱数を取得するためのメソッドはたくさんありますが、クラス、つまりMathメソッドを使用した例を示しますrandom()。私たちには何があるでしょうか?このメソッドを呼び出すと、範囲 (つまり、1 を除く 0 ~ 1) からMath.random()擬似乱数の実数 ( ) が返されます。これは、範囲内の最大値が 0.99999999999 であることを意味します... さて、擬似乱数を取得しましたが、独自の範囲が必要な場合はどうすればよいでしょうか? たとえば、[0;100) の範囲の疑似乱数が必要ですか? コードを書きます:double[0;1)
public static void main(String... args)
{
	final double max = 100.; // Максимальное число для диапазона от 0 до max
	final double rnd = rnd(max);

	System.out.println("Псевдослучайное вещественное число: " + rnd);
}

/**
 * Метод получения псевдослучайного вещественного числа от 0 до max (исключая max);
 */
public static double rnd(final double max)
{
	return Math.random() * max;
}
結果は悪くありませんでしたが、max(私たちの場合は)まだ理解できませんでした。[0;100] の範囲の乱数を取得するには、乱数に 1 を加えてから、 (使用する範囲に応じて) ormaxのような整数に変換する必要があります。コードを書きます:intlong
public static void main(String... args)
{
	final int max = 100; // Максимальное число для диапазона от 0 до max
	final int rnd = rnd(max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от 0 до max (включая max);
 */
public static int rnd(int max)
{
	return (int) (Math.random() * ++max);
}
注:ご覧のとおり、max 変数はプレフィックス形式によってインクリメントされました。(これが何なのかわからない場合は、私の記事を読むことをお勧めします。) 素晴らしい、望んでいたものは得られましたが、0 からではなく、たとえば [10;75] の範囲が必要な場合は、次の コードを書きます。
public static void main(String... args)
{
	final int min = 10; // Минимальное число для диапазона
	final int max = 75; // Максимальное число для диапазона
	final int rnd = rnd(min, max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от min до max (включая max);
 */
public static int rnd(int min, int max)
{
	max -= min;
	return (int) (Math.random() * ++max) + min;
}
メソッドからのコードを解析しますrnd

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
計算後の最大数は65です 。擬似乱数の実数 (例) は 0.18283417347179454 です ( を呼び出して取得しましたMath.random())。最大数は、乗算の前にプレフィックス形式で増分されました。最大数は 66 になりました。0.18283417347179454 に 66 を掛けます。乗算の結果は 12.06705544913844 になります。最大値に擬似乱数の実数を乗算した結果を整数型に変換しますint。変換結果に最小値である 12 を追加します。結果は 22 です。分析からわかるように、たとえ擬似乱数の実数がゼロに等しい場合でも、結果として最小値が返されます。乗算の結果に最小値を加算します。これが皆様にとって有益で有益なものであったことを願っています。Java をマスターして頑張ってください ;) 私の記事をいくつか紹介します: インクリメントとデクリメントとは モジュロ除算演算子
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION