首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有嵌套循环的问题

问有嵌套循环的问题
EN

Stack Overflow用户
提问于 2013-04-04 01:53:28
回答 2查看 125关注 0票数 2

当运行moveRight()函数时,我得到一个错误,它无法识别mapx,说这是未定义的。只有当"Player“在最后一个y循环中时,才会发生这种情况。我不明白为什么会这样,有人能帮我解释一下吗?

代码语言:javascript
复制
var map = [
    ["Blank", "Blank", "Blank", "Blank"],
    ["Blank", "Blank", "Blank", "Blank"],
    ["Blank", "Blank", "Blank", "Blank"],
    ["Blank", "Player", "Blank", "Blank"],
    ["Blank", "Blank", "Blank", "Blank"],
    ["Blank", "Blank", "Blank", "Blank"],
    ["Blank", "Blank", "Blank", "Blank"]
];

function moveRight() {
    var breakLoop = false;
    for (y = 0; y < map.length; y++) {
        for (x = 0; x < map[y].length; x++) {

            var posX = map[x][y].indexOf("Player");
            if (posX <= -1) continue;
            if (y >= map[y].length-1) {
                breakLoop = true;
                break;
            }

            breakLoop = true;
            console.log("x: " + x);
            console.log("y: " + y);

            map[x][y] = "Blank";
            map[x][y+1] = "Player"; 
            break;
        }
        if (breakLoop) break;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 01:56:42

按照在外部循环中使用y,在内部循环中使用x编写循环的方式,映射需要首先由y访问,然后由x访问。

代码语言:javascript
复制
var posX = map[y].indexOf("Player");

然后,y边界检查应该改为检查x,这是有意义的,因为这是一个水平移动。

代码语言:javascript
复制
if (x >= map[y].length - 1) {

移动线应为:

代码语言:javascript
复制
map[y][x] = "Blank";
map[y][x+1] = "Player"; 

此外,最好将var添加到局部变量声明中,这样它们就不会泄漏到全局作用域中。

代码语言:javascript
复制
for (var y = 0; y < map.length; y++) {
    for (var x = 0; x < map[y].length; x++) {

最后,看起来您不需要内部循环。您使用indexOf搜索每一行,因此不需要遍历行中的每个单独的方块。这意味着posX可以成为x。

应用所有这些想法,下面是最终的代码。注意一些仔细的重构是如何让我们去掉breakLoop变量的。

代码语言:javascript
复制
for (var y = 0; y < map.length; y++) {
    var x = map[y].indexOf("Player");

    if (x <= -1) {
        continue;
    }

    if (x < map[y].length - 1) {
        console.log("x: " + x);
        console.log("y: " + y);

        map[y][x]     = "Blank";
        map[y][x + 1] = "Player"; 
    }

    break;
}
票数 2
EN

Stack Overflow用户

发布于 2013-04-04 01:56:41

循环的结构是将y作为第一个索引,x作为第二个索引。在下面两行中,您使用它们的顺序是错误的

代码语言:javascript
复制
map[x][y] = "Blank";
map[x][y+1] = "Player"; 

它应该是

代码语言:javascript
复制
map[y][x] = "Blank";
map[y + 1][x] = "Player"; 

此外,y + 1索引是可疑的。在循环的最后一次迭代中,它将超出数组的边界。您的意思是将循环条件更改为y + 1 < map.length吗

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15794498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档