其他If语句未运行

时间:2019-05-19 15:11:32

标签: javascript

当函数运行时,我试图将变量保持在一个数字范围内,但是if语句无法运行。

我试图让对象仅在其0到50之间移动,如果对象值X试图达到55,它将无法运行代码,但是我面临的问题是move.X值为51和move.Y是7,什么都没有运行,我需要将它移到move.Y仍将运行if语句,而move.X只能向后运行。 (减少数字)

go(move) {
      if (move.X > 0 && move.X < 50) {
        if (move.Dir === "W") {
          move.X -= 1;
        } else if (move.Dir === "E") {
          move.X += 1;
        }
        if (move.Y > 0 && move.Y < 50) {
          if (move.Dir === "N") {
            move.Y -= 1;
          } else if (move.Dir === "S") {
            move.Y += 1;
          }
        } else {
          console.log("Too Far");
        }
      }
    }

3 个答案:

答案 0 :(得分:1)

您可以采用其他方法,并检查位置和所需方向。

function go(move) {
    if (move.X > 0 && move.Dir === "W") move.X -= 1;
    else if (move.X < 50 && move.Dir === "E") move.X += 1;
    else if (move.Y > 0 && move.Dir === "N") move.Y -= 1;
    else if (move.Y < 50 && move.Dir === "S") move.Y += 1;
    else console.log("Too Far");
}

答案 1 :(得分:1)

您的代码有两个问题:

1)如果其中一个值超出范围,例如X = -1,那么您将无法再回到该范围,因为在这种情况下,您会同时阻塞两个方向。

您应该更改逻辑以仅在E到达左边界时阻止E,而在W到达右边界时仅阻止W,这样可以再次将对象移入范围。

2)仅当move.X > 0 && move.X < 50为false时,将执行else的最后一部分。所有其他嵌套的ifs将不会进入该分支。

您要么不能如Nina的答案所示嵌套if / elseifs,要么必须向每个if添加else分支。

答案 2 :(得分:0)

如果move.Dir值与每个坐标严格关联(W和E-带有X,而N和S-带有Y),我将尝试如下:

function go(move) {
  switch(move.Dir) {
    case 'W':
        if (move.X > 0) { move.X -= 1; }
        break;
    case 'E':
        if (move.X < 50) { move.X += 1; }
        break;
    case 'N':
        if (move.Y > 0) { move.Y -= 1; }
        break;
    case 'S':
        if (move.Y < 50) { move.Y += 1; }
        break;
  }
}