在数组中初始化数组

5

使用我创建的图块编辑器,我得到了以下数组:

int [][] Level02 = new int[][]  {
                            { 11, -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, 12}, 
                            { 11, -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, 12}, 
                            { 11, -1, -1, -1, -1, 13, -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, 13, -1, -1, 13, -1, -1, -1, -1, 12}, 
                            { 11, 13, -1, -1, 27, 27, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, 13, 13, -1, -1, -1, 13, 13, -1, -1, -1, 32, -1, -1, 27, 27, 25, 25, 27, 27, -1, -1, 32, 12}, 
                            { 16, 16, 16, 16, 16, 16, 16, 16, 16, -1, -1, 13, 13, -1, -1, -1, 13, -1, -1, -1, 25, 25, 25, -1, -1, -1, 27, 27, 27, 27, -1, -1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, 
                            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
                        }

因此,它会打印出一个二维数组。

问题是,我有几百个这样的类,想要组织它们以便能够像这样进行操作:Levels.getlevelCount;

所以我想到了可以使用三维数组:int [][][] AllLevels = new int [][][]

但我的问题是: 是否有一种方法可以声明一个嵌套在另一个数组中的数组,就像这样:

int[][][] all = new int[][][]{


      int [][] Level01= new int[][] {
    { -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}};

int [][] Level02= new int[][] {
    { -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}};


        };

以上代码会导致编译错误。

如果你有这种类型的数组,请考虑将数据从代码中移除,并从文件/数据库初始化数组。维护你的代码的人会感谢你。 - SJuan76
我没有任何文件。我的瓷砖编辑器给了我这个。我不知道我的图形设计师会在意什么 :D - AndroidXTr3meN
1
你已经得到了答案,我只想指向http://www.oracle.com/technetwork/java/codeconv-138413.html Java 命名规范。 - stryba
3个回答

2
int[][][] all = .....

int[][] level1 = all[0];
int[][] level2 = all[1];

2
当然,这里有一个2D的例子:
int[] level1, level2;
int[][] all = new int[][] {
    level1 = new int[]{ 1, 2 },
    level2 = new int[]{ 3, 4 }
 };

首先,我们为每个级别(level)声明变量level1level2。根据您的示例,我假设您想要对它们进行引用。如果不需要,可以将它们省略。因此,多维数组只是一个数组的数组... 因此,您可以单独初始化顶层数组的每个元素。
然后请注意,赋值运算符=实际上返回一个值,即赋值的值。

我的意思是在第三个数组中声明一个二维数组。换句话说,比您展示的多一步。 - AndroidXTr3meN
这个想法是一样的。我只是做了一个二维的例子来说明所使用的概念。 - tskuzzy
你需要分别声明 level1 和 level2,就像 tskuzzy 的示例一样,然后在 all 的声明中进行赋值 -- 如果你想使用这种方法。 - Louis Wasserman
但如果我有30个数组,那么我就必须这样做:int [][][] = 和所有的数组...需要很长时间。 - AndroidXTr3meN
如果你有30个数组,为什么不直接使用all[i]而不是创建30个变量呢? - Louis Wasserman
显示剩余2条评论

2
您不能完全按照您所拥有的方式进行操作,但可以通过以下方式进行操作。
int [][] twod1 = {{1, 1,}, {-1, -1}};

int [][] twod2 = {{1, 1,}, {-1, -1}};

int [][][] threed = {twod1, twod2};

如果您喜欢的话,也可以反过来做。

int [][][] threed2 = {{{1, 1,}, {-1, -1}},
                     {{1, 1,}, {-1, -1}}};

int [][] twod3 = threed2[0];

int [][] twod4 = threed2[1];

您还可以直接在代码中进行初始化,但我认为这种方式不太易读。如果您选择在代码中进行初始化,您也不能使用简写初始化,实际上您必须为每个二维 int 数组声明 new int[][]

int [][] twod5; 

int [][] twod6;

int [][][] threed3 = { twod5 = new int[][]{{1, 1,}, {-1, -1}},
                       twod6 = new int[][]{ {1, 1,}, {-1, -1}}};

太好了!但是有没有人可以用实际初始化替换{twod1,twod2}? - AndroidXTr3meN
@AndroidXtr3meN,我更新了我的答案,并给出了相反的情况,这更接近你需要的吗? - Dev
这些都编译通过了,所以如果需要的话,你应该能够复制/粘贴这些代码段。 - Dev
谢谢,但是int [][][] threed3 = { int [][] array2d= new int[][]{{1, 1,}, {-1, -1}}; };不知道为什么没起作用 - AndroidXTr3meN
更改为int [][] array2d; int [][][] threed3 = { array2d= new int[][]{{1, 1,}, {-1, -1}} };,你不能在另一个数组内声明数组,只能分配它。 - Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接