java中的随机数问题(难)

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:54:47
要实现一个算法:生成n个0~1之间的随机数,并且它们的和为1,不知道怎么弄?我写了一个算法是这样的,但是老是算不出来,看来要指定和为1的确很难找到。
我的程序源码如下(谁有更好的方法?感觉我的算法不太科学):

import java.util.*;
public class random
{
public static void main(String[] args)
{

double random=0.0,sum=0.0;
double a[]=new double[10];//这里的n为10
for(int i=0;i<9;i++)//先算前面9个
{

do
{
sum-=random;//如果sum>=1,则减去random
random = Math.random();
sum+=random;
}while(sum>=1);
a[i]=random;
sum+=random; //进入上面的do-while循环时要减去random,所以在这要先加上一个random
}

do
{
sum-=random;//for循环退出之时多加了一次random
random = Math.random();
sum+=random;
}while(sum!=1);
a[9]=random;
for(int i=0;i<10;i++)
System.out.println(a[i]);
}
}

代码我就不给你写了。提供一个思路:
1.随机生成n个数(比如1-1000)
2.求这n个数的和
3.用每个随机数除以n个数的和得到你要得结果。

晕,写得那么乱啊....
要是我的话,一个方法产生n个0~1的数,
一个方法计算它们的和.
如果不等于1的话就再做一次直到等于1
这样应该行的吧