java - 如何使用特定值填充 3d 数组

标签 java arrays multidimensional-array processing 2d-games

我希望这看起来不是一个简单的问题。 我之前已经能够通过这种方法填充二维数组。但我不确定如何使用这个网格或类似的网格来填充 3D 数组。这可能是一个非常简单的问题,但我希望有人能指出我正确的方向。 我想用它来制作 2d 游戏关卡。

int[][][] LevelGrid = new int[LevelGridHeight][LevelGridWidth][3]; 

int[][][] start_Grid = { {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
                         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
                         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
                         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
                         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
                         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
                         {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,} }

谢谢

最佳答案

您可以将一维数组视为“事物”的数组,无论该数组是什么类型,事物都是如此。

int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] array3 = {7, 8, 9};
int x = array1[0];

您可以将二维数组视为数组的数组

   int[][] array2d= {array1, array2, array3};
   int[] xArray = array2d[0];
   int x = xArray[0]; //array2d[0][0];

您可以将三维数组视为数组的数组的数组

   int[][][] array3d = {array2d_1, array2d_2, array2d_3};
   int x = array3d[0][0][0];

因此,您可以先构建子数组,然后将它们添加到 3D 数组中,也可以在一个 block 中完成所有操作:

int[][][] array3D = { 
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} }, 
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} }
};

编辑:以下是首先构建子数组,然后从中构建 3d 数组的示例:

void setup() {

  //one-dimensional arrays are arrays of things
  int[] array1 = {1, 2, 3};
  int[] array2 = {4, 5, 6 };
  int[] array3 = {7, 8, 9};

  int[] array4 = {10, 11, 12};
  int[] array5 = {13, 14, 15};
  int[] array6 = {16, 17, 18};

  //two-dimensional arrays are arrays of arrays
  int[][] row1 = {array1, array2, array3};
  int[][] row2 = {array4, array5, array6};

  //three-dimensional arrays are arrays of arrays of arrays
  int[][][] array3d = {row1, row2};
}

而且我没有设置大小,因为我使用的是数组初始化简写,所以我不需要提前设置大小。请注意,初始化 start_Grid 时也没有设置大小。

还要注意,就像其他人所说的那样,使用这样的数组可能会变得非常笨拙。因此,除非您有充分的理由使用数组,否则您可能应该使用某种数据结构。我想无论你的“底层”数组代表什么,都可以用某种对象来代表,然后你只需要一个二维数组,这更容易考虑。但这实际上取决于您 - 3D 数组只是数组的 2D 数组!

关于java - 如何使用特定值填充 3d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475891/

相关文章:

java - BestBefore 拼图测试用例

java - 将多个文本添加到文本区域

javascript - 我如何检查一个对象是否在我的数组中?

java - 使用 Java 覆盖 Android 手机上的默认位置

python - 如何在 Numpy C API 中使用 PyArray_SearchSorted

c - 动态数组分配困惑

java - 如何在 Hangman 游戏中使用 3D 数组?

php - 如何通过路径访问多维数组元素?

c - 行优先 3-D 数组地址

java - 设置要使用 BufferedReader 读取的文件的相对路径