我正在尝试用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。但是第一个例子怎么样?这是一个错字吗?答案 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>>
)。使用数组不是不正确,但我个人觉得使用集合比使用数组更容易。