Я пытаюсь понять многомерные массивы в 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. Но как насчет первого примера? Это опечатка?