ここにその考えがあります。 の範囲の乱数を、たとえば[-1.1,2.2]
としましょう。簡単な例から始めましょう。その範囲は2.2 - (-1.1) = 3.3
から3.3までです。今では、ほとんどの "ランダム"関数は、[0,1)
の長さを持つ数値を返します。スケール私たちの希望する範囲に私たちの乱数。
Random random = new Random();
double rand = random.nextDouble();
double scaled = rand * 3.3;
今私達の乱数は、私たちが望む大きさを持っているが、我々は我々が望む正確な値の間になるように数直線でそれをシフトする必要があります。このステップでは、範囲全体の下限をスケールされた乱数に追加するだけで済みます。
double shifted = scaled + (-1.1);
だから今我々は、単一の機能で一緒にこれらの部品を置くことができます。もちろん
protected static Random random = new Random();
public static double randomInRange(double min, double max) {
double range = max - min;
double scaled = random.nextDouble() * range;
double shifted = scaled + min;
return shifted; // == (rand.nextDouble() * (max-min)) + min;
}
を、この機能はNaN
のような予期しない値をチェックするいくつかのエラーを必要とするが、この答えは、一般的な考え方を説明する必要があります。
私は本当にその正確な制限の背後にある理由を知りたいです。 – adelphus
Java 7では、ここではもっと簡単な答えがありますhttp://stackoverflow.com/a/32808589/1743880 – Tunaki