【问题标题】:Initialize Array in an array在数组中初始化数组
【发布时间】:2012-02-15 23:02:19
【问题描述】:

使用我创建的平铺编辑器,我得到一个这样的数组:

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;

所以我发现我可以做一个 3 维数组: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}};


        };

上面的代码给出了一个编译错误。

【问题讨论】:

  • 如果您有这种数组,请考虑从代码中删除数据并从 file/db 初始化数组。必须维护您的代码的人会感谢您。
  • 我没有任何文件。我的磁贴编辑器给了我这个。而且我看不出我的平面设计师会如何关心:D
  • 你已经得到了答案,我只想指出你oracle.com/technetwork/java/codeconv-138413.htmlJava 命名约定

标签: java android arrays multidimensional-array organization


【解决方案1】:

你不能完全按照你的要求去做,但你可以做到。

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 我用相反的情况更新了我的答案是更接近你需要的吗?
  • 这一切都可以编译,因此您应该能够在需要时复制/粘贴这些段。
  • 谢谢,但是 int [][][] threed3 = { int [][] array2d= new int[][]{{1, 1,}, {-1, -1} }; };没有工作
  • 改成int [][] array2d; int [][][] threed3 = { array2d= new int[][]{{1, 1,}, {-1, -1}} };你不能在另一个数组里面声明一个数组,只能赋值。
【解决方案2】:
int[][][] all = .....

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

【讨论】:

    【解决方案3】:

    当然,这是一个 2D 示例:

    int[] level1, level2;
    int[][] all = new int[][] {
        level1 = new int[]{ 1, 2 },
        level2 = new int[]{ 3, 4 }
     };
    

    首先我们为每个级别声明变量level1level2。我假设您希望根据您的示例来引用它们。如果没有,那么您可以将它们排除在外。所以多维数组只是数组数组的数组……所以你可以简单地分别初始化顶层数组的每个元素。

    然后注意赋值运算符=实际上返回一个值,即赋值的值。

    【讨论】:

    • 好吧,我的意思是在 3rd 中声明一个二维数组。另一个词比你显示的多一步
    • 思路是一样的。我只是做了一个 2D 示例来说明所使用的概念。
    • 你需要分别声明level1和level2,就像tkuzzy的例子一样,然后在all的声明中赋值——如果你想使用这种方法。
    • @AndroidXTr3meN:在第一个数组之外声明 Level01Level02。然后在数组初始值设定项中省略 int[][] 声明。
    • 但是如果我有 30 个数组,那么我必须像 int [][][] = 那样做,所有的数组......永远需要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多