このアプローチは、 https://stackoverflow.com/a/738651/360211nextInt
というアプローチよりも偏りがあり、効率が悪いことに注意してください
これを達成するための 1 つの標準的なパターンは次のとおりです。
Min + (int)(Math.random() * ((Max - Min) + 1))
Java Math ライブラリ関数 Math.random() は、範囲内のdouble 値を生成します[0,1)
。この範囲には 1 が含まれていないことに注意してください。
最初に特定の範囲の値を取得するには、対象とする値の範囲の大きさを掛ける必要があります。
Math.random() * ( Max - Min )
これは範囲内の値を返します[0,Max-Min)
。ここで、'Max-Min' は含まれません。
たとえば[5,10)
、 が必要な場合は、5 つの整数値をカバーする必要があるため、
Math.random() * 5
[0,5)
これは、5 を含まない範囲の値を返します。
次に、この範囲をターゲットとする範囲にシフトする必要があります。これを行うには、最小値を追加します。
Min + (Math.random() * (Max - Min))
これで、範囲内の値が取得されます[Min,Max)
。この例に従うと、次のことを意味し[5,10)
ます。
5 + (Math.random() * (10 - 5))
しかし、これにはまだ含まれておらずMax
、二重の値を取得しています。含まれる値を取得するにはMax
、range パラメーターに 1 を追加して(Max - Min)
から、int にキャストして小数部分を切り捨てる必要があります。これは次の方法で実現されます。
Min + (int)(Math.random() * ((Max - Min) + 1))
そして、あなたはそれを持っています。範囲内のランダムな整数値[Min,Max]
、または例ごと[5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))