本当に使用Math.random
する必要がある場合は、乗算 (および追加) する必要があります。かなり基本的な数学ですが、Math.random()
0.0 以上 1.0 未満の正符号付きの double 値を返します。
したがって、X で乗算すると、0.0 以上で X 未満の数値が得られます。それを int にキャストして小数を取り除きます。偶数だけが必要な場合は、いくつかのことを行うことができますint even = (notSureIfEven >> 1) << 1;
。[「偶数」の数字は実際には「整数」を意味していると思いますが、その場合は無視してかまいません。] 次に、範囲を 0->X ではなく Y-> X 結果に Y を追加するだけです (乗算の前に X から Y を減算してください。そうしないと、範囲が Y->X+Y になります)。
同じ数を 2 回生成しないようにするには、別のことを行うことができます。1 つの方法は、これまでに生成したすべての数値を a に保存しList
、新しい数値を生成するときに、contains
その数値が既にリストされているかどうかを確認し、そうであれば、リストにない数値が得られるまで新しい数値を生成します (そして次に、明らかにそれをリストに追加する場合)。もう 1 つの方法は、生成できるすべての数値をリストにプリロードしてから、そのリストから乱数を削除することです。
ただし、どちらの方法でも、非常に大きな範囲の数値にはうまくスケーリングできない可能性があります。1 つ目は、まだ生成されていない数値を見つけようとして非常に長いループに陥る可能性があるためです。2 つ目は、最初に非常に大きなリストを作成する必要があるためです。本当に大きな範囲の場合に何かできるかどうかはわかりません。