3

1/2 から -1/2 の間のランダムな値を生成する方法を見つけようとしています。

以下のようなことを試しましたが、これが正しい方法かどうかはわかりません....

誰かがこれを実装する良い方法を教えてもらえますか?

public static void main(String args[]) {
        double Max = .5;
        double Min = -0.5;
        for (int i = 0; i < 10000; i++) {
            double value = Min + ((Math.random()) * (Max - Min));
            System.out.println(value);
        }
    }
4

3 に答える 3

9

まあとMath.random()の間のランダムな double を返すので、範囲を から に変更するには、減算するだけです(とから):01-1/21/21/20 - 1/2 = -1/21 - 1/2 = 1/2

Math.random() - 0.5

あなたが今やっていることは、より一般的です。つまり、2 倍の範囲が必要な場合minmax適切な式は次のようになります。

min + Math.random() * (max - min)

この場合、プラグインするとmin = -0.5max = 0.5

-0.5 + Math.random() * (0.5 - -0.5)

これは次のように単純化されます

Math.random() - 0.5

また、メソッドのドキュメントを読むと、0.0以上で1.0未満random()の double が返されることがわかります。これは、上記の式が範囲 の数値を生成する必要があることを意味します。つまり、が返される可能性はありますが、返されることはありません。[-0.5, 0.5)-0.50.5

于 2013-04-15T23:13:16.397 に答える
5

あなたはただ行うことができます:

Math.random() - 0.5

これは、 の最小Math.random()値が 0、最大値が 1 であるためです。半分を引く0 - 0.5 == -0.5と、最小値は になり、最大値は になります1 - 0.5 == 0.5

したがって、元のコードは次のように短縮できます。

public static void main(String args[]) {
    for (int i = 0; i < 10000; i++) {
        double value = Math.random() - 0.5; // no need for a "double" cast,
                                            // Math.random() returns a double
        System.out.println(value);
    }
}
于 2013-04-15T23:12:47.393 に答える
1

Math.Random() クラスは、1 を含まず、0 から 1 の間の値を返すことに注意してください。

この場合、Math.Random()-0.5甘く動作します

于 2013-04-15T23:17:27.060 に答える