Я пытаюсь понять многомерные массивы в 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. Но что относительно первого примера? Действительно ли это - опечатка?
Почему это 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).
Как отметил другие плакаты, вы правильно думаете о том, что он должен быть выведен «22».
Как побочная записка, если у вас нет конкретной причины не , вы должны рассмотреть возможность использования одной из коллекций Java, в отличие от массива. Возможно, вектор векторов (т. Е. вектор <Вектор
). Неверно, что неверно использовать массив, однако лично я лично узнаю его намного проще работать с коллекциями, чем массивы.
Почему это 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.