【发布时间】:2015-03-31 15:17:51
【问题描述】:
我正在尝试用 javascript 编写一个骰子游戏,使用 Math.random() 生成骰子的值,并使用一个数组来保存每个骰子的当前值。
我遇到的问题是 1),数组最终包含六个数字,循环只运行五次,2) 我不知道如何让 Math.random() 返回不同的数字每次掷骰子。
这是有问题的函数:
var array = []
function rollDice() {
for (var i = 0; i <= 4; i++) {
var roll = Math.floor(Math.random() * 6) + 1;
array[i] = roll;
//array.splice(i, 1, roll);
}
}
你可以看到'i'在循环中从零迭代到四(相当于五个循环),并且在每个循环中生成另一个随机数并插入到数组中的等效位置。
关于数组中的项目数:如果我按照上面写的方式运行代码,我会得到这样的结果:[1, 2, 3, 4, 5, undefined]。 如果我使用带有'splice'函数的注释行运行它(它应该删除存储在'i'位置的值并将其替换为新值),我将得到 [1, 2, 3, 4, 5, 6]。如果循环只运行了五次,这是怎么回事?
至于我让随机数更可靠地变化的困难:我在循环中尝试了以下...
var roll;
while (roll === hand[i] || roll === null) {
roll = Math.floor(Math.random() * 6) + 1;
}
...希望'roll' 会继续旋转随机数,直到它产生一个不同的数字,但没有骰子。有人有什么建议吗?
编辑:我添加了一个显式数组声明,因为我没有足够清楚地表明我的数组实际上之前是显式声明的。
【问题讨论】:
-
试试
array[array.length]=roll;。此外,您在循环之前缺少var array=[];行。或者改用for (var roll = i = 0, array = []; i <= 4; i++),这是更可取的方式。并删除var roll = [...];上的var。 -
您的代码看起来不错,请查看fiddle
-
你需要确保你声明了你的数组;你没有发布你的代码的那部分。
while循环不起作用可能是因为roll将以undefined开始,而不是null,所以循环根本不会运行。 -
我的阵列似乎有些混乱。它被明确且正确地声明,我只是将声明从我的代码 sn-p 中删除,因为我认为我的读者会认为这是给定的。我现在什么都不做,并相应地编辑了我的帖子。
-
不清楚你的目标是什么。你想要5个没有重复的随机数吗?那是你想要做的吗?如果不是,请解释一下,因为您的第一个代码块成功生成了 5 个随机数。
标签: javascript arrays loops