を使用して 2 倍になる乱数をどのように生成しますMath.random()
か? たとえば、 set から乱数を生成しようとして(2,4,6,8)
いますが、どうすればよいでしょうか?
7 に答える
この特定のセットでは、使用できます
(int)(Math.random() * 4) * 2 + 2
ここ:
Math.random()
0.0 以上で厳密に 1.0 未満の数値を生成します。(int)(... * 4)
0、1、2、3 のいずれかを返します。... * 2 + 2
2、4、6、8 のいずれかを返します。
よし、本当の一般解を作ろう。
int lower = 2;
int upper = 8;
int step = 2;
int rand = (int)(Math.random() * (upper-lower+1));
int result = rand - rand%step + lower;
指定したセットとは別のセット内で数値を生成する場合は、セットに合うように、lower、upper、および step 変数を変更するだけです。セット内にある場合、上限が含まれます。
(ほぼ)完全に一般的なアプローチはそれほど難しくありません。
static randInt(int first, int last, int step) {
int nsteps = (last+1-first) / step;
return first + step*(int)(nsteps*Math.random());
}
{start, start+step, start+2*step, ... }
これは、を含む までのランダムな整数、またはがシーケンスの一部でない場合はstop
その前の最後の数値を返します。stop
stop
int choice = randInt(2, 8, 2); /* random choice from {2, 4, 6, 8} */
...サンプルの質問を解決しました。
(ほとんど)部分は、これが引数の整数オーバーフローまたは符号エラーを処理しないことです(step
is zero、step<0
when first<last
、またはその逆)。
より一般的な回答を追加したいと思います。
セット内の最小の整数が A で、セットのサイズが S であると仮定します。セットからのランダムな整数は次のようになります。
A + myRandom.nextInt(S) * 2
Java での特定の例では、次のようになります。
Random myRandom = new Random();
int randomNum = 2 + myRandom.nextInt(4) * 2;
int[] numSet={2,4,6,8};
Random myRand=new Random();
int myNum=numSet[myRand.nextInt(numSet.length)];
これにより、ランダム オブジェクトである数値の配列が作成され、数値の配列からランダムな要素が選択されます。これは、数値が何らかの数学的系列にあるとは想定していません。さらに言えば、11、25、31、876、984368、7432、84562 の可能性があります。
y 値からそのセットを生成する多項式があるとは言わないでください。知っている。
それらの数値を配列に入れます。配列の長さ - 1 を使用して乱数を生成し、それをインデックスとして使用して配列要素をランダムに選択します。
次のように java.util.Random クラスを使用することもできます。
int values[] = {2,4,6,8};
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(values.length);
int randomValue = values[randomInt]; /* Here's your random value from your set */