js实现双色球

双色球

需求: 分为两个部分:
红球区:1到33之间生成随机的不重复的6个球
篮球区:1到16之间生成一个随机数

随机数

是Math对象的一个方法random(),这个方法可以生成0到1([0,1):包含0不包含1)的随机小数

//随机数
			var ran = Math.random();
			document.write(ran);

数组

保存一组数据的容器.

//数组的声明
			//静态声明
			var arr = [1,2,3,4,5];
			document.write(arr);
			document.write("<br />");
			//动态
			var arr = new Array();
			document.write(arr);
  • 生成1到33之间的随机整数
//生成1到33之间的随机整数
			var ran = Math.random();
			document.write(ran);//[0,1)
			document.write("<br />");
			//给ran*33 [0,33)
			ran *=33;
			document.write(ran);//[0,33)的随机小数
			document.write("<br />");
			//给ran+1
			ran += 1;
			document.write(ran);//[1,34)的随机小数
			document.write("<br />");
			//取整 去尾法
			//ran = Math.floor(ran);
			ran = parseInt(ran);
			document.write(ran);//[1,33]的随机整数
			document.write("<br />");
  • 建立一个包含1到33之间所有整数的数组
var redBase = new Array(33);
			for (var i=0;i<redBase.length;i++) {
				redBase[i]=i+1;
			}
			document.write(redBase);
			document.write("<br/>");
  • 建立红球数组,并且想办法赋值(每个数都不能相同-去重)
//2 建立红球数组,不考虑去重,赋值
			// 1到33之间的随机整数
			//思考:怎么样去重
			var red = new Array(6);
			for (var i = 0; i < red.length; i++) {
				//             [0,33) 取整 [0,32]
				red[i] =redBase[parseInt(
					(Math.random()*redBase.length))];
			}
			document.write(red);
			document.write("<br/>");
  • 去重
    去重逻辑//3去重 新建立一个标记数组,标记哪些数值被使用过
    //如果被使用过就再次随机生成数据
    //标记数组内有33个值,初始值都设计为0,如果被使用
    //就赋值为1,值为1的的下标对应的redbase数组下标的数据
    //已经被使用,就需要再次重新生成随机值.
//3.1 建立标记数组
			var use = new Array(33);
			for (var i = 0; i < use.length; i++) {
				//元素值为0是表示对应同下标redBase数组
				//的元素未被使用
				//为1时表示被使用
				use[i]=0;
			}
			//2 建立红球数组,不考虑去重,赋值
			// 1到33之间的随机整数
			//思考:怎么样去重,使用结构,生成随机的操作
			//必须至少
			//执行一次,所以要使用do-while结构
			var red = new Array(6);
			for (var i = 0; i < red.length; i++) {
				//             [0,33) 取整 [0,32]
				/*red[i] =redBase[parseInt(
					(Math.random()*redBase.length))];*/
			    //获取随机下标,这个操作至少执行一次
			    var n = -1;
			    do{
			    	n = parseInt(
					(Math.random()*redBase.length));
			    }while(use[n] == 1);
			    //等于1表示被使用,需要重新生成
			    //赋值
			    red[i] = redBase[n];
			    //打标记
			    use[n]=1;
			}
			
			document.write(red);
			document.write("<br/>");
			//3去重 新建立一个标记数组,标记哪些数值被使用过
			//如果被使用过就再次随机生成数据
			//标记数组内有33个值,初始值都设计为0,如果被使用
			//就赋值为1,值为1的的下标对应的redbase数组下标的数据
			//已经被使用,就需要再次重新生成随机值.
  • 蓝球只有一个,1到16之间的随机整数,放入red数组的最后一个位置即可
//蓝球
			var blue = parseInt(
					(Math.random()*16+1));
			red[red.length]=blue;
			
			document.write(red);
			document.write("<br/>");

思考:这个只是针对单一的双色球实现的代码,能不能把它封装成为一个方法,一个对象,然后去复用实现大乐透,22选5…其它的一些彩票的生成方法.

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值