【问题标题】:Incrementing a variable in a cycle (modulo)在循环中增加一个变量(模)
【发布时间】:2015-11-10 16:39:26
【问题描述】:

我希望在激活函数(称为update)时通过模式0、1、2、0、1、2……循环变量的值(称为x)。我已经设法得到 1, 2, 0, 1, 2, 0, ... 通过这样做:

var x = 0;

function update() {
  x = ++x % 3;
}

然后我尝试了后自增运算符,x 的值只是保持在 0:

var x = 0;

function update() {
  x = x++ % 3;
}

然后我越想这段代码,我就越困惑。我认为首先完成 0 模 3,然后将(0)分配给 x,但随后 x 没有增加到 1? (似乎不是,但这不是我想要的——我希望模式从 0 开始。有人可以解释这段代码发生了什么以及如何实现从 0 开始的模式吗?

【问题讨论】:

  • 简单的x = (x+1) % 3; 怎么样?我认为写x = x++ 真的很奇怪......因为从逻辑上讲,x++ 将被执行,它会返回x 的先前值并将其分配给x,它的初始值,所以对我来说,@987654333 @ 应与 x = x % 3 相同。

标签: javascript increment


【解决方案1】:

您的第二个代码示例正在执行此操作

  1. 存储 x 的旧值
  2. 增加 x
  3. 将 x 的旧值除以 3
  4. 将模数的结果存储在 x 中

如果你这样称呼它,你的第一个代码应该会给你正确的解决方案:

look_at_value()
update()
look_at_value()
update()
...

如果要在查看值之前调用更新,则需要初始化 x = -1(或 2 mod 3)

更清晰的代码是:

function update() {
    x = (x+1) % 3;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2013-01-16
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多