Как я ссылаюсь на многомерные массивы?

Я пытаюсь понять многомерные массивы в 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 [] [] .length (это кажется 2-ми, 3-ми уровнями, но я не получаю то, что я ожидаю)?

Я выполнил свой код части и добрался 2. Я понятия не имею, почему это два. Это, потому что у меня есть два набора на третьем уровне? Я ожидал добираться четыре из-за этих четырех наборов точек.

Спасибо за Вашу помощь мне понять.

Править: Я выяснил, почему это два. Это дает мне мои две точки в самом внутреннем наборе. Если бы я хотел четыре, то я использовал бы thePieces[0].length. Но что относительно первого примера? Действительно ли это - опечатка?

5
задан johnny 21 January 2010 в 00:17
поделиться

3 ответа

Почему это 21? Я думал, что это будет 22.

22 правильно - я провел код, чтобы проверить его.

Индексы относятся к элементам массива, от внешних для внутренних. Так,

MyPEIK [0] {{0,0}, {1,0}, {1,1}, {0,1}} (массив, содержащий массивы) , MyPieces [0] [0] {0,0} (массив, содержащий ints), и MyPieces [0] [0] [0] 0 (int).

5
ответ дан 14 December 2019 в 08:51
поделиться

Как отметил другие плакаты, вы правильно думаете о том, что он должен быть выведен «22».

Как побочная записка, если у вас нет конкретной причины не , вы должны рассмотреть возможность использования одной из коллекций Java, в отличие от массива. Возможно, вектор векторов (т. Е. вектор <Вектор > ). Неверно, что неверно использовать массив, однако лично я лично узнаю его намного проще работать с коллекциями, чем массивы.

0
ответ дан 14 December 2019 в 08:51
поделиться

Почему это 21? Я думал, что это будет 22.

Пример неверно. Это будет 22.

Я попробовал заготовки [0] [0] [0]. Длина, но получила ошибку, которую я не понял?

Это требует небольшого объяснения. Когда вы говорите:

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

Вы объявляете переменную, называемые числами, чтобы быть массивом массивов массивов INTS. Это звучит смешно. В любом случае, ThePieces.length действителен, потому что капли оспы катаются. Когда вы разыгрываете массив, подобный так:

thePieces[index]

Вы получаете массив массивов INTS, на которых вы можете вызвать длину, потому что это массив чего-либо. Итак:

thePieces[index0][index1]

- это массив INT, который вы можете вызвать длину (я надеюсь, что вы увидите шаблон к настоящему времени).

thePieces[index0][index1][index2]

дает вам простое int, которое не имеет свойства длины.

Я провел свой код и получил 2. У меня есть Не имею, почему это два. Это потому что я есть два набора на третьем уровне? я ожидается получить четыре из-за четыре набора точек.

Вы звоните:

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

, которые печатаются 2, потому что капли [0] указывает на этот массив:

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

, который вернет 4 (если вы называете заготовки [0] .length). Тем не менее, капли [0] [0] указывает на:

{0, 0}

, который имеет длину 2.

2
ответ дан 14 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: