2017-08-04 4 views
0

乱数を生成していますが、私は均等な分配問題を抱えています。範囲内の最初と最後の数字は、両側で丸められる可能性がないため、常に選択された変更の半分になります。Androidの乱数問題

たとえば、ユーザーが1の最小値を選択し、最大値が10の場合、1と10は他の値よりも選択される可能性が低くなります。ここで

は私の現在のコードです:

double num = random.nextDouble() * (max - min) + min; 
String finalNum = String.format("%." + precision + "f", num); 

私が代わりに)nextIntを(使用してこれを修正する可能性が知っているが、ユーザがどのように多くの小数点以下の桁を選択したため、問題は、私は二重のそれを維持したいということですあるだろう。

お手数ですが、

+3

'num'を計算すると、' int'になります。 'nextInt'に切り替えても精度はまったく変わりません。あなたが望んでいる精度は、すでに破棄されています。 – resueman

+0

コードを修正しました。私は間違った。それは私のコードのようです – Jared

答えて

1
double min = 1.0; 
double max = 10.0; 
double rand = r.nextDouble(); 
//now we add 1 for the spread (we want the number to be from 0.5 to 10.5) 
double range = max - min + 1; 
rand *=range; 
//now we shift by an offset of min-0.5; 
rand += (min -0.5); 
//now we round the number 
int intRand = Math.round(rand); 

あなたの精度 を表示するためのrand(ダブル)を使用してランダムあなたの整数をintRand(int)を使用することができます。

+0

私は私のニーズに合うようにあなたのコードを編集し、それは働いた。ありがとう! – Jared