双色球
需求: 分为两个部分:
红球区: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…其它的一些彩票的生成方法.