回答:
rangeMin
との間でランダムな値を生成するにはrangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
とはrangeMax
大きく、その後、それらの間の10,000,000の異なる二重の値があるかもしれません。の結果は(rangeMax - rangeMin) * r.nextDouble()
、これらの可能な10,000,000値のうち10,000の間のみを選択します。(これは完璧な説明ではないようですが、少し役立つかもしれません...)
この質問はJava 7のリリース前に行われましたが、現在、Java 7(およびそれ以降)APIを使用する別の可能な方法があります。
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
最小値(両端を含む)と最大値(両端を含まない)の間の擬似ランダムdouble値を返します。境界は必ずしもそうである必要int
はありませんdouble
。
これを使って:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
編集:
new Random().nextDouble()
:0から1の間の数値をランダムに生成します
start
:開始番号、番号を「右」にシフトします
end - start
:間隔。ランダムは0から1までの数を与えるため、ランダムはこの数の0%から100%までを与えます。
編集2: Tks @danielおよび@aaa bbb。私の最初の答えは間違っていました。
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
ランダムの主な考え方は、擬似ランダム値を返すということです。完全にランダムな関数などは存在しないため、同じシードを使用する2つのランダムインスタンスは、特定の条件で同じ値を返します。
それを理解するために、最初に関数ドキュメントを表示することをお勧めします(https://docs.oracle.com/javase/8/docs/api/java/util/Random.html)
関数nextDouble()の戻り値が0.0と1.0の間の疑似ランダム値であることを理解したので、これを有利に使用できます。
境界が有効(A> B)であるAとBの間の乱数を作成するには、次のことを行う必要があります。1. AとBの間の範囲を見つけて、「ステップ」の数を知ることができるようにします。2. random関数を使用して、実行するステップの数を決定します(戻り値は0.0から1.0の間であるため、「ランダムに増加する割合を選択する」と考えることができます。3.オフセットを追加します
結局、私の意見では、暴徒があなたにそうする最も簡単で最も一般的な方法を与えたことがわかります
double randomValue = rangeMin +(rangeMax-rangeMin)* r.nextDouble();
double RandomValue = Offset +(Range)*(0.0-1.0の間のrandomVal)
double rangeMax= Double.MAX_VALUE;
とdouble rangeMin= -rangeMax;
、あなたは常に見返りに無限の値を取得します。を確認したい場合がありDouble.valueOf(rangeMax-rangeMin).isInfinite()
ます。