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

多维数组:Java。这段代码是如何工作的?,java,for-loop,multidimensional-array,iteration,conceptual,Java,For Loop,Multidimensional Array,Iteration,Conceptual,我一直在遵循一个关于用Java创建一个基本的基于瓷砖的塔防游戏的教程,遇到了一段我无法理解的代码,希望得到一些帮助。(我的主要问题在代码后面的底部) 此时,我们正在迭代一个多维数组0和1,我们将其传递给一个构造函数,该构造函数有一个方法,为0分配一个草块,为1分配石头块,然后另一个方法将它们绘制到创建游戏屏幕的屏幕上。很简单,对吧 这是课程: 因此,我的主要问题与TileGrid的构造函数中的switch语句有关 为什么在检查其等于什么时,i和j会切换newMap[j][i]?我知道这段代码是有

我一直在遵循一个关于用Java创建一个基本的基于瓷砖的塔防游戏的教程,遇到了一段我无法理解的代码,希望得到一些帮助。(我的主要问题在代码后面的底部)

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

这是课程:

因此,我的主要问题与
TileGrid
的构造函数中的switch语句有关

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

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

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


我已经试着去弄明白这一点,并自己研究这一点,并将继续这样做,直到我理解它,但任何帮助都将非常感谢

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


如果输入
int[]]map
也有20行15列,则不必在构造函数内切换索引顺序。

如果确实切换,则会出现索引越界错误。然而,在第二个for循环中有一个col变量没有在任何地方定义,因此很难判断发生了什么。这段代码不会编译


如果是从某个网页上的教程中提取的代码,我只会假设它是一个打字错误,然后继续记住它。或者最好与作者联系。

您的代码充满了拼写错误。我怀疑这就是其中之一。没有任何理由解释为什么switch语句应该说
map[j][i]
,而不是相反,并且两个映射之间的维度可以颠倒。编辑掉“col”变量。这是我之前更改变量名称以更好地理解发生了什么。我明白了。我把构造函数中创建的2D数组更改为15行20列的数组,然后将switch语句中的数组更改为
newMap[I][j]
,但由于某些原因,它在屏幕上以错误的方向打印瓷砖,导致屏幕上只有一部分有瓷砖,另一部分是黑色。我将继续讨论它,看看为什么…@BrandonVance在屏幕坐标中,第一个坐标表示列(x),第二个坐标表示行(y)。在数组中它是相反的-第一个索引是行号,第二个是列号。谢谢!事实上,我只是想看看情况如何。刚开始很难理解。我想这就是学习:P
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},

    };