首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.6  更新数组

如图3-4所示,这个Bingo卡片脚本还无法确保给定的列中不出现重复的数字。这个示例要纠正这个问题,同时说明数组不必进行初始化并读取,而是可以在运行时声明和设置它们。这会提供很大的灵活性,因为可以在脚本运行时通过计算或函数修改数组中的值。脚本3-8演示了具体的做法,其中只有几行新代码。

脚本3-8  在脚本运行期间修改数组的内容是一种非常强大的技术

window.onload = newCard;

var usedNums = new Array(76);

function newCard() {

   if (document.getElementById) {

     for (var i=0; i<24; i++) {

       setSquare(i);

     }

   }

   else {

     alert("Sorry, your browser doesn’t support this script");

   }

}

function setSquare(thisSquare) {

   var currSquare = "square" + thisSquare;

   var colPlace = new Array(0,1,2,3,4,0,1,2,3, 4,0,1,3,4,0,1,2,3,4,0,1,2,3,4);

   var colBasis = colPlace[thisSquare] * 15;

   var newNum = colBasis + getNewNum() + 1;

   if (!usedNums[newNum]) {

     usedNums[newNum] = true;

     document.getElementById(currSquare).innerHTML = newNum;

   }

}

function getNewNum() {

   return Math.floor(Math.random() * 15);

}

在运行时更新数组的步骤如下:

(1) var usedNums = new Array(76);

这是一种声明数组的新方法。我们将usedNums变量声明为一个包含76个对象的新数组。正如前面提到的,这些对象可以是任何东西。在这个示例中,它们是布尔值,即true/false值。

(2) if (!usedNums[newNum]) {

usedNums[newNum] = true;

如果usedNums数组中的newNum位置上是false(表达式前面的!表示“非”),那么就将它设置为true,并将newNum写到卡片上。如果newNum位置上是true,就什么也不做。这样就不会有重复的数字,但是卡片上可能会留下空的格子(图3-5)。在下一节中我们要解决这个缺陷。

图3-5  我们消除了重复的数字,但是现在留下了一些空格子,还需要重新来过

ü提示

q 为什么这个数组要包含76个元素?因为我们希望使用1~75的值。如果将它声明为包含75个元素,那么编号是从0~74。76个元素允许我们使用1~75的值,只需忽略第0号元素即可。

q 如果不对布尔值进行初始化,那么它们会自动地设置为false。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论