rand5()产生rand7() 方法总结

rand5()产生rand7()  方法总结

方法一(代码见:rand7ByRand5Function1):

              1、先用rand5()产生一个1-4的随机数(即如果产生5的话就重新再产生)

              2 、如果产生的是1,有他负责产生1或2  即再用rand5()产生个1或0的随机数+1

                    如果产生的是2,有他负责产生3或4  即再用rand5()产生个1或0的随机数+3

                     ........

                    如果产生的是4,有他负责产生7或8  即再用rand5()产生个1或0的随机数+4

              3、如果产生了8就再回到1直到不是8为止。

方法二(代码见:rand7ByRand5Function2):

              1、用二进制,不多讲解。

方法三(代码见:rand7ByRand5Function3):

              1、先得到1-10的平均分布

              2、如果不在范围内,重新生成。

public class ChangeRand {

	/**
	 * 功能:
	 * 作者:徐俊伟
	 * 时间:2012-11-19下午08:19:31
	 * @param args
	 * 返回值类型:void
	 */
	public static void main(String[] args) {
		int []a=new int[10];
		int []b=new int[10];
		int []c=new int[10];
		int count=1000000;
		int temp;
		int i;
		System.out.println("方法一验证:");
		for(i=0;i<count;i++){
			temp=rand7ByRand5Function1();
			a[temp]=a[temp]+1;
		}
		for(i=1;i<8;i++){
			System.out.println("产生"+i+"的次数为:"+a[i]+"概率为:"+a[i]*1.0/count);
		}
		
		System.out.println("方法二验证:");
		for(i=0;i<count;i++){
			temp=rand7ByRand5Function2();
			b[temp]=b[temp]+1;
		}
		for(i=1;i<8;i++){
			System.out.println("产生"+i+"的次数为:"+b[i]+"概率为:"+b[i]*1.0/count);
		}
		
		System.out.println("方法三验证:");
		for(i=0;i<count;i++){
			temp=rand7ByRand5Function2();
			c[temp]=c[temp]+1;
		}
		for(i=1;i<8;i++){
			System.out.println("产生"+i+"的次数为:"+c[i]+"概率为:"+c[i]*1.0/count);
		}
	}
	
	/**
	 * 
	 * 功能:有rand5产生rand7 方法一
	 * 作者:徐俊伟
	 * 时间:2012-11-19下午09:16:13
	 * @return
	 * 返回值类型:int
	 */
	public static int rand7ByRand5Function1(){
		int temp=rand5();
		while(temp==5){
			temp=rand5();
		}
		switch(temp){
		case 1:{
			temp=randByRand5()+2*temp-1;break;
		}
		case 2:{
			temp=randByRand5()+2*temp-1;break;
		}
		case 3:{
			temp=randByRand5()+2*temp-1;break;
		}
		case 4:{
			temp=randByRand5()+2*temp-1;break;
		}
		}
		if(temp==8){
			return rand7ByRand5Function2();
		}
		else{
			return temp;
		}
	}
	
	/**
	 * 
	 * 功能:有rand5产生rand7 方法二
	 * 作者:徐俊伟
	 * 时间:2012-11-19下午08:45:37
	 * @return
	 * 返回值类型:int
	 */
	public static int rand7ByRand5Function2(){
		int tmep=4*randByRand5()+2*randByRand5()+randByRand5();
		while(tmep==0){
			tmep=4*randByRand5()+2*randByRand5()+randByRand5();
		}
		return tmep;
	}
	/**
	 * 
	 * 功能:有rand5产生rand7 方法三
	 * 作者:徐俊伟
	 * 时间:2012-11-19下午08:45:37
	 * @return
	 * 返回值类型:int
	 */
	public static int rand7ByRand5Function3(){
		int temp=2*rand5()+randByRand5();
		while(temp<1||temp>7){
			temp=rand7ByRand5Function3();
		}
		return temp;
	}
	public static int randByRand5(){
		int temp=rand5();
		while(temp==5){
			temp=rand5();
		}
		return temp%2;
	}
	
	/**
	 * 
	 * 功能:产生1-5的随机数
	 * 作者:徐俊伟
	 * 时间:2012-11-19下午08:33:56
	 * @return
	 * 返回值类型:int
	 */
	public static int rand5(){
		double temp=Math.random();
		return ((int) (temp*10))%5+1;
	}

}




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值