【发布时间】:2017-04-28 21:58:02
【问题描述】:
我正在制作一个 JavaScript/jQuery 版本的骰子游戏,我和我的朋友们一起玩。这是游戏的 3 人版本:
http://codepen.io/jwnardini/pen/jmygqd
我正在尝试制作一个用户可以选择正在玩多少玩家的游戏版本,并以相同的方式拥有游戏功能:
http://codepen.io/jwnardini/pen/ZKLVqW
每次按下“开始”按钮时,它都应该轮到下一个人,我在 for 循环中使用模块化运算符 if 条件来检查轮到谁了,所以我可以执行特定操作轮到他们了。
var turn = 0;
$(".goButton").click(function() {
turn = turn + 1;
var playerCount = $('#input-number').val();
for (i=1;i <= playerCount;i++){
if (turn % playerCount == i) {
$(".player" + i + "dollars").append("Hi!");
}
}
});
这对我创建的每个玩家都非常有效,除了最后一个 (player# playerCount)。这是因为 playerCount % playerCount = 0,而 i 永远不会是 0,所以总是跳过最后一个玩家。
我试图用 else 语句来解决这个问题,当 turn % playerCount = 0 时:
var turn = 0;
$(".goButton").click(function() {
turn = turn + 1;
var playerCount = $('#input-number').val();
for (i=1;i <= playerCount;i++){
if (turn % playerCount == i) {
$(".player" + i + "dollars").append("Hi!");
} else if (turn % playerCount == 0) {
$(".player" + playerCount + "dollars").append("Hi!");
}
}
});
但是,当我轮到 player# playerCount 时,我得到 playerCount 次“嗨!”附加。例如,对于 5 个玩家,这是浏览器中的输出:
Player 1
$3Hi!
Player 2
$3Hi!
Player 3
$3Hi!
Player 4
$3Hi!
Player 5
$3Hi!Hi!Hi!Hi!Hi!
这对我来说是典型的“off by 1”错误吗?还是我的 else 语句在某些方面存在缺陷?
【问题讨论】:
-
当您只对循环外的一个值感兴趣时,为什么要使用循环呢?好像你只是想这样做:
$(".player" + (turn % playerCount) + "dollars").append("Hi!"); -
...或者如果您使用基于 1 的索引,
$(".player" + ((turn % playerCount) + 1)... -
请注意,
i在全局范围内,因为省略了var关键字
标签: javascript jquery loops if-statement