如何参考多维数组?

时间:2010-01-21 00:07:24

标签: java multidimensional-array

我正在尝试用Java来理解多维数组,但我认为它适用于任何语言。请考虑一下我在网上找到的这个片段:

          //************************************
            //     static array initialization
            //************************************
    byte[][] smallArray = { { 10, 11, 12, 13 },
    { 20, 21, 22, 23 },
    { 30, 31, 32, 33 },
    { 40, 41, 42, 43 }, };

    // Display the array element at row 2, column 3
    System.out.println(smallArray[1][2]); 
// Value is 21

为什么是21?我以为会是22岁。

我查了一下,因为我试图弄清楚在这种情况下长度意味着什么:

public class Pieces {
    int thePieces[][][];
    public Pieces(){

    }
    public int[][][] createPieces(){

        /* pieces in order below
                **** [0]

                **
                **

                *
                ****

                   *
                ****

                ***
                 *

                **
                 **

                 **
                ** [6]
         *
         *
         *
         */
       int myPieces [][][] =
       {
           {  //square
               {0,0},
               {1,0},
               {1,1},
               {0,1}

           },
           { //T
               {-1,0},
               {0,0},
               {0,1},
               {1,0}
           }

       };

       thePieces = myPieces;

    return thePieces;
    }

    public void printPieces(){

        System.out.println(thePieces[0][0].length);
    }

}

我正在尝试通过创建一个俄罗斯方块克隆来学习java。我不明白为什么长度需要使用[] []。这是我开始工作的唯一方式。我试过thePieces [0] [0] [0] .length但得到了一个我不明白的错误?

为什么我不必把[] [] []来获取参考?我在网上看到数组的第一个“级别”引用myArray.length而不是myArray [] .length。然后我用myArray [] []。长度(它看起来是第2级,第3级,但我没有得到我期望的那样)?

我运行了我的代码并得到2.我不知道为什么它是两个。是因为我在第三级有两套?由于有四组积分,我预计会得到四分。

感谢您帮助我理解。

编辑:我弄明白为什么它是两个。它给了我最里面的两点。如果我想要四个,我会使用thePieces [0] .length。但是第一个例子怎么样?这是一个错字吗?

3 个答案:

答案 0 :(得分:5)

  

为什么是21?我以为会是   22。

22是正确的 - 我运行了代码来验证它。

索引引用数组元素,从外部元素到内部元素。所以,

myPieces[0]{ {0,0}, {1,0}, {1,1}, {0,1} }(包含数组的数组), myPieces[0][0]{0,0}(包含整数的数组),和 myPieces[0][0][0]0(int)。

答案 1 :(得分:2)

  

为什么是21?我以为会是   22。

这个例子是错误的。它将是22岁。

  

我试过thePieces [0] [0] [0] .length但得到了一个我不明白的错误?

这需要一点解释。当你说:

int[][][] thePieces = { ... }

您声明一个名为thePieces的变量是一个由int数组组成的数组。听起来很有趣。无论如何,thePieces.length是有效的,因为thePieces是某种类型的数组。当您取消引用数组时,如下所示:

thePieces[index]

你得到一个int数组的数组,你可以调用它的长度,因为它是一个数组。 SO:

thePieces[index0][index1]

是一个int数组,你可以调用它的长度(我希望你现在看到一个模式)。

thePieces[index0][index1][index2]

给你一个普通的int,它没有length属性。

  

我运行了我的部分代码,得到了2.我有   不知道为什么它是两个。是因为我   在第三级有两套?一世   预计因为这个而得到四分   四套要点。

你打电话:

System.out.println(thePieces[0][0].length);

打印2,因为thePieces [0]指向此数组:

{  //square
    {0,0},
    {1,0},
    {1,1},
    {0,1}
}

将返回4(如果你调用了thePieces [0] .length)。然而,theces [0] [0]指向:

{0, 0}

长度为2。

答案 2 :(得分:0)

正如其他海报所指出的那样,你认为它应该输出'22'是正确的。

作为旁注,除非您有specific reason not to,否则您应该考虑使用其中一个Java集合而不是数组。也许是矢量矢量(即:Vector<Vector<Integer>>)。使用数组不是不正确,但我个人觉得使用集合比使用数组更容易。