当函数运行时,我试图将变量保持在一个数字范围内,但是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");
}
}
}
答案 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;
}
}