【问题标题】:How do I reference multi-dimensional arrays?如何引用多维数组?
【发布时间】:2010-01-21 00:07:23
【问题描述】:

我试图理解 Java 中的多维数组,但我认为它适用于任何语言。请考虑一下我在网上找到的这个 sn-p:

          //************************************
            //     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[][].length (它似乎是第 2、3 级,但我没有得到我期望的结果)?

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

感谢您帮助我理解。

编辑:我知道为什么它是两个。它给了我最里面的两分。如果我想要四个,我会使用 thePieces[0].length。但是第一个例子呢?是不是笔误?

【问题讨论】:

    标签: java multidimensional-array


    【解决方案1】:

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

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

    索引指的是数组元素,从外部元素到内部元素。所以,

    myPieces[0]{ {0,0}, {1,0}, {1,1}, {0,1} }(包含数组的数组), myPieces[0][0]{0,0}(一个包含整数的数组),并且 myPieces[0][0][0]0(一个整数)。

    【讨论】:

    • 我猜这只是一个错字。谢谢。
    【解决方案2】:

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

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

    我尝试了 thePieces[0][0][0].length 但收到了我不理解的错误?

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

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

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

    thePieces[index]
    

    你得到一个整数数组,你可以调用它的长度,因为它是一个东西的数组。所以:

    thePieces[index0][index1]
    

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

    thePieces[index0][index1][index2]
    

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

    我运行了我的代码并得到了 2。我有 不知道为什么是两个。是不是因为我 三级有两套吗?一世 预计会得到四个,因为 四组点。

    你打电话:

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

    打印 2 因为 thePieces[0] 指向这个数组:

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

    这将返回 4(如果您调用 thePieces[0].length)。但是,thePieces[0][0] 指向:

    {0, 0}
    

    长度为 2。

    【讨论】:

    • 我现在明白了。如果我使用 [][][] 我没有长度,而是一个值,因为这是对数组数组中特定项的引用。由于您所说的原因,我可以使用(我猜) int myInt = thePieces[0][1][0] 但不是 .length 。实际上,这是获取值的唯一方法,除 [][][] 之外的所有其他方法都必须使用长度(或者可能对数组有意义的其他方法),因为它们仅指向某个级别的数组(数组的数组数组的数组,数组的数组,数组)。
    【解决方案3】:

    正如其他发帖者所指出的,您认为应该输出“22”是正确的。

    附带说明,除非您有 specific reason not to,否则您应该考虑使用 Java 集合之一,而不是数组。也许是向量的向量(即:Vector<Vector<Integer>>)。使用数组并不是不正确的,但是我个人发现使用集合比使用数组更容易。

    【讨论】:

    • 我希望在了解如何使用数组后尝试一下。谢谢。
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多