これは非常に単純なJavaです(おそらくすべてのプログラミングに当てはまります)。
Math.random()
は、0から1までの数値を返します。
0から100までの整数を返したい場合は、次のようにします。
(int) Math.floor(Math.random() * 101)
百から百の間で、私はするだろう:
(int) Math.ceil(Math.random() * 100)
しかし、3〜5の数字を取得したい場合はどうなりますか?次のようになりますか。
(int) Math.random() * 5 + 3
私はJava.lang.util.Random
のnextInt()
について知っています。しかし、私はこれをMath.random()
で行う方法を学びたいです。
int randomWithRange(int min, int max)
{
int range = (max - min) + 1;
return (int)(Math.random() * range) + min;
}
randomWithRange(2, 5)
の10回の出力:
5
2
3
3
2
4
4
4
5
4
範囲は包括的、つまり[2,5]で、上の例ではmin
はmax
より小さくなければなりません。
編集: 誰かがmin
とmax
を逆にしようとしてバカになった場合は、コードを次のように変更できます。
int randomWithRange(int min, int max)
{
int range = Math.abs(max - min) + 1;
return (int)(Math.random() * range) + (min <= max ? min : max);
}
編集2: double
sについてのあなたの質問のために、それはちょうど:
double randomWithRange(double min, double max)
{
double range = (max - min);
return (Math.random() * range) + min;
}
あなたがばかにしたくないならば、それはそれだけです:
double randomWithRange(double min, double max)
{
double range = Math.abs(max - min);
return (Math.random() * range) + (min <= max ? min : max);
}
0から100までの数値を生成したい場合、コードは次のようになります。
(int)(Math.random() * 101);
10から20までの数を生成するには
(int)(Math.random() * 11 + 10);
一般的な場合:
(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
(ここでlowerbound
は包括的かつupperbound
排他的です).
upperbound
を含めるか除外するかは、選択によって異なります。 range = (upperbound - lowerbound) + 1
そしてupperbound
が包括的だとしましょう、しかしrange = (upperbound - lowerbound)
ならupperbound
は排他的です。
例:3〜5の整数が必要な場合、rangeが(5-3)+1の場合は5が含まれますが、rangeが(5-3)の場合は5が排他的です。
10から20までの数値を生成するには、Java.util.Random
を使用できます。
int myNumber = new Random().nextInt(11) + 10
これは境界を受け取り、ランダムな整数を返すメソッドです。もう少し進んだ(完全に普遍的な)境界は 正と負の両方 であり、最小/最大境界は任意の順序で来ることができます。
int myRand(int i_from, int i_to) {
return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}
一般に、境界間の絶対距離を求め、関連するランダムな値を取得してから、下側の境界に基づいて答えをシフトします。