【问题标题】:Array inside of a two-dimensional array?二维数组内的数组?
【发布时间】:2013-10-16 17:27:30
【问题描述】:

是否可以将数组放入二维数组中?解释:我需要一个二维字节数组,但我还需要每个单元格的三个字节值。它可能看起来像这样:

+-------------+-------------+
| 123,234,125 | 255,109,167 |
+-------------+-------------+
| 172,144,134 | 145,212,124 |
+-------------+-------------+

或者采用更合适的格式:

[ [ [ 123,234,125 ] , [ 255,109,167 ] ] , [ [ 172,144,134 ] , [ 145,212,124 ] ] ]

这将是一个包含三个字节数组的二维数组。这在Java中可能吗?

【问题讨论】:

标签: java arrays


【解决方案1】:

完全有可能。

这是一个例子:

byte[][][] myAwesomeByteArray = 
            { 
                { 
                    { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } 
                },
                { 
                    { 9, 10, 11 }, { 12, 13, 14 }, { 15, 16, 17 } 
                },
                { 
                    { 18, 19, 20 }, { 21, 22, 23 }, { 24, 25, 26 } 
                } 
            };
System.out.println(Arrays.deepToString(myAwesomeByteArray));

输出:

[[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]

【讨论】:

  • @HussainAkhtarWahid :D
【解决方案2】:

是的,这当然是可能的。您可以使用 3D 数组:

byte[][][] array = new byte[w][h][3];
array[0][0][0] = 123;
array[0][0][1] = 234;
array[0][0][2] = 125;

或者使用整数的二维数组。 ints 是 4 个字节,足以满足您的要求:

int[][] array = new int[w][h];
array[0][0] = (123 << 16) | (234 << 8) | (125);

【讨论】:

    【解决方案3】:

    有两种基本方法可以做您想做的事情。这里有两个例子可以试一试。

    int [][][] firstArray = new int[][][] {{{ 123,234,125 } , { 255,109,167 }} , {{ 172,144,134 } , { 145,212,124 }}};
    
    int [][][] secondArray = new int[2][2][3];
    

    第一个示例假定您确切知道数组的内容是什么,而第二个示例在填充数据时为您提供了更多的灵活性。

    希望对您有所帮助,如果您需要更多信息,请告诉我。

    【讨论】:

      【解决方案4】:

      您可以尝试使用此代码,但只需稍作修改即可根据您的要求进行更改。此处插入的所有值都是静态的,您可以将其设置为动态和插入。根据您的要求将 int 更改为 byte。

      public static void main(String args[])
      {
          /*Data Insertion*/
          int a[]=new int[3];
          a[0]=123;
          a[1]=234;
          a[2]=125;
          int a1[]=new int[3];
          a1[0]=255;
          a1[1]=109;
          a1[2]=167;
          int a2[]=new int[3];
          a2[0]=172;
          a2[1]=144;
          a2[2]=134;
          int a3[]=new int[3];
          a3[0]=145;
          a3[1]=212;
          a3[2]=124;
          Object s[][]=new Object[2][2];
          s[0][0]=a;
          s[0][1]=a1;
          s[1][0]=a2;
          s[1][1]=a3;
          /*Data Retrieval*/
          for(int i=0;i<s.length;i++)
          {
              for(int j=0;j<2;j++)
              {
                  int sg[]=(int[])s[i][j];       
                  System.out.println("Value: "+sg[0]+" "+sg[1]+" "+sg[2]);
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        正如其他人指出的那样,这是可能的。

        当怀疑时,换个角度思考:这有什么理由是可能的?在数学和编程中,通常是这样的:没有明确禁止的,都是允许的。

        数组可以包含任何类型的元素。那么为什么不使用数组呢?

        现在考虑数组中的数组:它们的元素是什么类型的?请参阅上一段,然后随心所欲地走多远/深,因为它没有说明您可以走多远/深。除了内存限制等问题...

        【讨论】:

          猜你喜欢
          • 2017-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          • 2021-10-27
          • 2014-02-25
          相关资源
          最近更新 更多