Else If语句未执行:对象坐标范围控制逻辑异常
问题分析与修复方案
你遇到的核心问题是把X坐标的范围判断作为了所有移动逻辑的外层条件——只要X不在0-50之间,整个函数里的X和Y移动逻辑都会被跳过,这就是为什么move.X=51时,哪怕Y是合法的也没法移动的原因。另外你需要实现「X超出边界时只能反向移动(往合法范围走)」,而不是完全禁止X操作,咱们来一步步修复:
修复思路
- 拆分X和Y的移动逻辑:让两者独立判断,互不影响,这样X超出范围时,Y只要合法就能正常移动;
- 调整X的移动规则:
- 如果当前X在合法范围(0-50)内,允许对应方向移动,只要移动后不越界;
- 如果当前X已经超出上限(>50),只允许往西(W)移动(让X递减回到合法范围);
- 如果当前X已经超出下限(<0),只允许往东(E)移动(让X递增回到合法范围);
- Y坐标保持原有的范围判断逻辑,仅在0-50之间时允许对应方向移动。
修复后的代码
go(move) { // 独立处理X方向移动,实现边界反向逻辑 if (move.Dir === "W") { // 往西走:要么当前X减1后仍≥0,要么当前X已经超出上限(往回走) if (move.X - 1 >= 0 || move.X > 50) { move.X -= 1; } } else if (move.Dir === "E") { // 往东走:要么当前X加1后仍≤50,要么当前X已经超出下限(往回走) if (move.X + 1 <= 50 || move.X < 0) { move.X += 1; } } // 独立处理Y方向移动,保持原有合法范围判断 if (move.Y > 0 && move.Y < 50) { if (move.Dir === "N") { move.Y -= 1; } else if (move.Dir === "S") { move.Y += 1; } } else { // 只有Y超出范围时才提示 console.log("Too Far"); } }
关键场景验证
- 当
move.X=51,move.Y=7时:- 如果方向是W:X会减1到50(合法),Y如果是N/S且在0-50之间正常移动;
- 如果方向是E:X不会变化(因为加1会到52,超出上限),Y正常移动;
- 当
move.X=0时:只有E方向能让X加1,W方向禁止; - 当
move.X=50时:只有W方向能让X减1,E方向禁止; - Y的移动完全不受X状态影响,只要在0-50之间就能正常移动。
内容的提问来源于stack exchange,提问作者JS_noob
相关产品推荐
相关产品推荐

