【问题标题】:Please explain how the remainder operator works here?请解释余数运算符如何在这里工作?
【发布时间】:2018-04-08 09:08:28
【问题描述】:

我不明白== 0 是如何与代码的remainder 部分配合使用的,例如(4+4) % 2 == 0,这不会是4,但是这段代码给出了true,@987654326 @、truefalse

var size = 8;

var board = "";

for (var y = 0; y < size; y++) {
  for (var x = 0; x < size; x++) {
    if ((x + y) % 2 == 0)
      board += " ";
    else
      board += "#";
  }
  board += "\n";
}

console.log(board);

【问题讨论】:

  • 8 模2等于0,符合== 0的条件
  • 4 会是什么? 4 + 48。而8 % 20。所以(4 + 4) % 2 == 0true。你到底有什么不明白的地方?
  • @NisalEdu 这不是 Java。正确的资源是MDN
  • @Xufox 我知道那个例子是 0 但前面也是 0 但它应该是一个开/关类型但不会 (3+3) % 2 == 0也一样?
  • @ajhernandez95 是的,当然。 3 + 36。但这不是“以前的”计算。还有(3 + 4) % 2 == 1(4 + 3) % 2 == 1

标签: javascript


【解决方案1】:

当有除法时,将 %(modulo) 视为“余数”

让我举几个例子......

10% 2 = 0; //2 会进 10,5 次留下余数 0

12% 2 = 0; //2 将进入 12、6 次并留下余数 0

5%2 = 1;// 2 会进入 5, 2 次,余数为 1

6%3 = 0; // 3 将进入 6, 2 次并留下余数 0

3%5 = 3; //5不能进3,所以余数是3,同理 编号

(4+4)%2 = 0 // 8%2 = 0 .....2 将进入 8,四次并留下一个 余数 0

【讨论】:

  • 你从哪里引用这段文字?
【解决方案2】:

我想你可能误解了modulo 的工作原理。这个例子应该打印出每次迭代的模数余数是什么。如果等式左边除无余数,则得到 0。

const size = 8;

let board = "";

for (let y = 0; y < size; y++) {
  for (let x = 0; x < size; x++) {
    console.log(x + ' plus ' + y + ' (' + (x+y) +') modulus 2 equals ' + (x + y) %2);
    board += ((x + y) % 2 === 0) ? " " : "#";
  }
  board += "\n";
}

console.log(board);

【讨论】:

  • 事实证明,他误解了嵌套 for 循环的工作原理。
【解决方案3】:

% 是取模运算。它将返回数字除以操作数后剩下的任何内容。所以(4+4)%28%2 相同。当 2 准确地进入 8 时(没有提醒),它返回 0。

【讨论】:

    【解决方案4】:

    (4 + 4) % 2

    8 / 2 = 4

    剩余值为0

    操作会给我们除法后的剩余价值

    10 % 17 = 10

    当我们对上述情况使用长除法时,

    1) 在 10 个答案中找出 17 的个数是 0

    2) 那么 10 - (0 * 17) = 10

    【讨论】:

      【解决方案5】:

      var size = 8;
      
      var board = "";
      
      for (var y = 0; y < size; y++) {
        for (var x = 0; x < size; x++) {
          if ((x + y) % 2 == 0)
            board += " ";
          else
            board += "#";
        }
        board += "\n";
      }
      
      console.log(board);

      按预期工作。

      模运算符返回余数。您将使用它创建一个棋盘图案。如果要反转它,请使用=== 1。如果您希望每一行都相同,只需使用x%2 === 0x%2 === 1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多