2010-12-10 8 views
0

例10の値のランダムなdouble値を作成するメソッドを作成しました。num1、num2、... num10この10個の値の合計は1:num1 + num2 + ... + num10 = 1 My methodフォーラム
Getting N random numbers that the sum is M内のメソッドのようなものです:Java割り当てのヘルプ

private static double[] randSum(int n, double m) { 
    Random rand = new Random(); 
    double randNums[] = new double[n], sum = 0; 

for (int i = 0; i < randNums.length; i++) { 
    randNums[i] = rand.nextDouble(); 
    sum += randNums[i]; 
} 

for (int i = 0; i < randNums.length; i++) { 
    randNums[i] /= sum * m; 
} 

    return randNums; 
} 

しかし、この方法は次のように非常に長い番号を作成します。0.18593711849349975 私にも使用さ恐らくMath.round()メソッドが、この方法で私の番号は、0.0、0.5、0.0です... 私は0.01から0.99または0.1から0.9までの数字が必要です。整数値を使用していた場合、Random.nextInt(0.98)+0.01のような方法でこれを行うことができますが、nextDouble()メソッドはパラメータを受け付けません。どうすればいいですか?私を助けてくれますか?おかげ

+0

私はあなたが再考することをお勧めしたいこの質問のタイトルは、より意味のあるものにするためです。また、変数名のいくつかを再考してください。 'n'と 'm'は読者にはあまり意味がありません。 –

答えて

4

あなたは100で、その結果を丸めるあなたの数を掛けnextIntを経由して整数を生成し、その後、10

1

のに必要な力によってそれらを分割することができます。それはあなたに重要でない桁が剥ぎ取られた元の数を与えるでしょう。その後、結果を100で割り、元の縮尺に戻します。

x = Math.round(x*100.0)/100.0; 
2

次のように生成します。ラウンドそれはあなたが2つの小数を使用する場合は、次のように、あなたがそれを行うことができ、この方法に

public static double round(double d, int decimalPlace){ 
    BigDecimal bd = new BigDecimal(Double.toString(d)); 
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP); 
    return bd.doubleValue(); 
    } 
 double d = 3.1537; 
     // output is 3.2 
     System.out.println(d + " : " + round(d, 1)); 
     // output is 3.15 
     System.out.println(d + " : " + round(d, 2)); 
     // output is 3.154 
     System.out.println(d + " : " + round(d, 3)); 
+0

私はあなたの方法を使用して、それはいいですが、それを使用した後、数字の合計は1になりません –

+0

@サンドラあなたはこの方法を使用して精度でランダムにすることができます単純に基本的な算術を適用する合計10 –

0

を使用して:

private static double[] randSum(int n, double m){ 
    double[] randoms = new double[n]; 
     int valueLeft = (int) (m * 100); 

     for(int i = 0; i < n-1; i++){ 
      int tempRand = (int)(Math.random() * valueLeft); 

      randoms[i] = (double)tempRand/100; 
      valueLeft -= tempRand; 

      System.out.println(tempRand + " " + randoms[i] + " " + valueLeft); 
     } 
     randoms[n-1] = (double)valueLeft/100; 

     return randoms; 
}