java - 多维数组 : Java. 这段代码是如何工作的?

标签 java for-loop multidimensional-array iteration conceptual

我一直在关注有关用 Java 创建基本的基于图 block 的塔防游戏的教程,并且遇到了一段我无法理解的代码,并且需要一些帮助。 (我的主要问题在代码后面的底部)

此时,我们正在迭代一个由 01 组成的多维数组,并将其传递给构造函数,它有一个方法为 0's 分配草 block ,为 1's 分配石头 block ,然后用另一个方法将它们绘制到屏幕上以创建我们的游戏屏幕。很简单,对吧?

这是类(class):

package data;

import static helpers.Artist.*;

public class TileGrid {

public Tile[][] map;

public TileGrid(int[][] newMap){
    map = new Tile[20][15];
    for(int i = 0; i < map.length; i++){
        for(int j = 0; j <map[i].length; j++){
            switch(newMap[j][i]){
            case 0:
                map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.GRASS);
                break;
            case 1:
                map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.STONE);
                break;
            case 2:
                map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.WATER);
                break;
            }
        }
    }
}

public void Draw(){
    for(int i = 0; i < map.length; i++){
        for(int j = 0; j < map[i].length; j++){
            Tile t = map[i][j];
            DrawQuadTex(t.getTexture(), t.getX(), t.getY(), t.getWidth(), t.getHeight());
        }
    }
}

}

这是我们传入的数组:

int[][] map = { //20 tiles wide, 15 tiles high
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},

    };

所以我的主要问题与 TileGrid 构造函数中的 switch 语句有关。

为什么在检查其相等时,ij 会切换 newMap[j][i]?我知道这段代码有效,因为它确实有效,而且我理解嵌套 for 循环来迭代多维数组。

但是为什么 newMap[i][j] 不起作用呢?

同样,在同一个构造函数的最开始,为什么我们在传入时要创建一个维度为 map = new Tile[20][15] 的数组(Tile 类型)尺寸为 map[15][20] 的数组?

我试图自己解决这个问题并研究这个问题,并将继续这样做,直到我理解它,但任何帮助将非常感激!

最佳答案

您正在向 TileGrid 构造函数传递一个 15 行 20 列的 2D 数组,但在构造函数内您创建了一个 20 行 15 列的 2D 数组。这就是为什么 map[i][j] 对应于 newMap[j][i]

如果输入 int[][] map 也是 20 行和 15 列,则无需在构造函数内切换索引的顺序。

关于java - 多维数组 : Java. 这段代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586917/

相关文章:

java - 从 bat 文件调用 Java 应用程序并在完成后继续?

java - 如何从递归函数中提取基本情况返回?

c++ - 迭代器不是对象吗?

Java Antwalk - 二维数组

c - 将二维数组传递给 C 函数

java - 将 ND4J INDArray 转换为列表

java - 数组:个人号码 (CPR)

java - 尝试用随机数创建 for 循环?

c - C中的循环问题

python - 查找相邻最大值的numpy数组坐标