2017-10-18 6 views
4

四捨五入:1.0、1.1 - 私はこれらの数字(2000)の多くは、私は1.0と10である気づい印刷10Javaのランダム()私は乱数を生成するJavaのランダムを使用してい

Random random = new Random(); 
return (double) ((random.nextInt(91) + 10)/10.0); 

を他のすべてよりも著しく印刷されていない(20回繰り返し、毎回発生した)。ほとんどの場合、0.95-0.99と10.01-10.04は生成されないためです。

は今、私はこれについてのスレッドをたくさん読みましたが、それはまだ、次の質問に私の葉:

これらの数字は、例えば成績を表したい場合、あなたは1よりも高いより低い取得することはできませんここでは10、0.95から10.04までの範囲を拡張することは正当でしょうか?

Random random = new Random(); 
return Double.valueOf((1005-95)/100); 
+0

生成した数字の数はいくつですか? – osanger

+0

ああ、申し訳ありませんが、私は2000の数字を生成し、それを少なくとも20回繰り返しました。だから私は – RichardB

+0

に気づき、1.1から10までの数字を生成したいのですが? – osanger

答えて

1

次のコードを使用し1.1と10の間のランダムな値を生成するには:ほとんどの

double min = 1.1d; 
    double max = 10d; 
    Random r = new Random(); 
    double value = min + (max - min) * r.nextDouble(); 

あなたの結果ラウンドすぎMath.floor(value)を使用することができますAfterwarsds

1

この前提

をおそらく0.95-0.99と10.01-10.04は が生成されていないためです。

が間違っています。ランダムintを10以上100以下の範囲で生成します。より小さい分数と値の丸めはそれに反映されません。ランダムなnextIntは区間内でランダムです。最終的なケースは差別されません。

は、私はあなたの方法が

Random random = new Random(); 
return (double) ((random.nextInt(91) + 10)/10.0); 

が正しい見えると思います。あなたが経験している異常を測定することをお勧めします。あなたが単に出力を見ているときから人間の偏見があるかもしれません。

ここでは、91値の実際のランダム生成を測定するコードを示します。これは理想的ではない2倍に変換する前です(しかし、10で割ることは、10 - > 1.0、11 - > 1.1 ... 99 - > 9.9および100 - > 10.0のマップ値以外は何もしません。最終的な結果の尺度は、もちろん10及び100の値は、他と同じしばしば出てくるように見える

Random random = new Random(); 

    int[] measure = new int[101]; 
    for (int i = 0; i < 10000; i++) { 

     int number = (random.nextInt(91) + 10); 
     measure[number]++;   

    } 
    for (int i = 0; i < 101; i++) { 

     System.out.println(i + " count: " + measure[i]); 

    } 

はそのコードからの結果を見ると)、より望ましいであろう。

+0

だから私はこれらの結果が20回連続してランダムであると言っていますか?私はそれを100回以上実行すると、私は2.1または8.5と同じだろうか? – RichardB

+0

私の編集をチェックしてください。除算と整数から倍精度へのマッピングが心配されている場合は、ポイントを少し失うかもしれません。私たちは人間がデータを見るときに行う「解釈」を過小評価すべきではありません。私はあなたの最初の方法が間違っているとは思わない! – Adam

+0

陽気な結果どのように結果が私には、今でもほとんどが生成されていることがわかります...あなたがランダムに打ち負かすことはできないと推測します... – RichardB

関連する問題