描述:
已知随机产生函数rand8()能生产的随机数是整数1~8的均与分布,如何构造rand10()函数,使其生产的随机数是整数1~10的均与分布。
分析:
要保证rand10()生产的随机数是整数1~10的均匀分布,可以构造一个1~10n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1~10n区间上的随机数,那么x%10+1就是均匀分布在1~10区间上的整数。
实验代码:
package lock;
import java.util.Random;
public class T17 {
//产生的随机数是整数1~8的均与分布
private static int rand8()
{
Random random =new Random();
return random.nextInt(8)+1;
}
//产生的随机数是整数1~10的均与分布
public static int rand10()
{
int x=0;
do
{
x=(rand8()-1)*8+rand8();
}
while(x>40);
return x%10+1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i!=10;++i)
System.out.print(rand10()+"");
}
}