当前位置: 代码迷 >> Java相关 >> 随机数有关问题-已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10
  详细解决方案

随机数有关问题-已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10

热度:60   发布时间:2016-04-22 20:34:17.0
随机数问题--已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10.

Math.random()随机生成(0,1)之间的float数,Random7随机生成[1,7]之间的整数,利用Random7构造Random10的步骤:

1、生成数a:a是两次Random7的结果,即a=(Random7()-1)*7+Random7()-1;

2、判断a是否小于40,如果小于40,则返回a/4+1,即为最后的结果;否则,继续执行Random10;

public class B
{
public static int Random7(){
return (int)(Math.random()*7+1);
}
public static int Random10(){
int a=49;
while(a>=40){
a=(Random7()-1)*7+Random7()-1;
}
return a/4+1;
}
public static void main(String[] args)
{
for(int i=0;i<50;i++){
System.out.println(Random10());
}
}
}

 

3楼摩箜贼
直接用a = Random7*10 -1,a/10+1,可行?
Re: cabout.Java
@摩箜贼这样不行,a = Random7*10 -1生成的是(9,19,29,...,69)是离散的数字,而不是从0到69的连续数字(0,1,2,3,...,69).
2楼猴子要努力吃
直接用用(int)(Math.random(max-min)+min),比如说生成1-100的随机数,Math.random(100-1)产生的随机数是0-99,然后再加1,随机数就变成1-100的了。同理int a=(int)(Math.random()*6+1);不知道这样可以吗?
Re: cabout.Java
@猴子要努力吃,Math.random(100-1)???java的random()不带参数的吧
1楼摩箜贼
为什么是这么考虑的呢?
  相关解决方案