创建2D数组时,如何记住是先指定行还是指定列?
Answers:
Java被认为是“行主要的”,这意味着它首先执行行。这是因为2D数组是“数组数组”。
例如:
int[ ][ ] a = new int[2][4]; // Two rows and four columns.
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
也可以像这样可视化:
a[0] -> [0] [1] [2] [3]
a[1] -> [0] [1] [2] [3]
第二个插图显示了“数组数组”方面。第一个数组包含{a[0] and a[1]}
,每个数组都是一个包含四个元素的数组{[0][1][2][3]}
。
TL; DR摘要:
Array[number of arrays][how many elements in each of those arrays]
有关更多说明,另请参见二维数组。
本能地从几何角度思考:水平(X)轴,然后垂直(Y)轴。但是,对于2D数组,情况并非如此,首先是行,然后是列。
考虑以下类比:在几何图形中,人走到梯子(X轴)上并爬上梯子(Y轴)。相反,在Java中,人会下降梯子(行)然后走开(列)。
To be crystal clear, it is not merely OK to ask and answer your own question, it is explicitly encouraged.
全部取决于您对阵列的可视化。行和列是数组(而不是数组本身)的可视化属性(可能在您的想象中)。
这与询问数字“ 5”是红色还是绿色完全相同。
我可以把它画成红色,我可以把它画成贪婪吧?颜色不是数字的整体属性。以相同的方式,将2D数组表示为行和列的网格对于该数组的存在不是必需的。
2D数组只有第一个尺寸和第二个尺寸,所有与可视化相关的东西都纯属您的口味。
当我有char数组时char[80][25]
,我可能想在旋转的控制台上打印它,这样我就有25行80个字符,适合屏幕而不滚动。
当将2D数组表示为行和列根本没有意义时,我将尝试提供可行的示例:假设我需要一个1000000000000整数的数组。我的机器有8GB的RAM,所以我有足够的内存,但是如果尝试执行var a = new int[1000000000]
,很可能会出现OutOfMemory异常。那是因为内存碎片-没有连续的这种大小的内存块。相反,您可以使用自己的值创建2D数组10000 x 100000。从逻辑上讲,它是一维数组,因此您希望将其绘制并想象成一个单一的值序列,但是由于技术实现,它是2D数组。
在Java中,没有多维数组。有数组的数组。所以:
int[][] array = new int[2][3];
它实际上由两个数组组成,每个数组都有三个元素。
在Java中,首先完成行,因为2维数组被认为是两个单独的数组。从第一行1维数组开始。
在c ++(遥远的,尘土飞扬的内存)中,我认为看代码和理解数组比在Java中要容易一些。两者都是行专业。此插图对我有所帮助,有助于理解。
给定此代码以二维字符串数组为例...
String[][] messages;
messages = new String[][] {
{"CAT","DOG","YIN","BLACK","HIGH","DAY"},
{"kitten","puppy","yang","white","low","night"}
};
int row = messages.length;
int col = messages[0].length;
将我的int命名为二维数组(行,列),我们将看到这些值。
row = (int) 2
col = (int) 6
最后两行代码,我们尝试确定大小并将其设置为row
,col
看起来并不那么直观,也不一定正确。
您在这里真正要处理的是这个(请注意新的变量名称以进行说明):
int numOfArraysIn = messages.length;
int numOfElementsIn0 = messages[0].length;
int numOfElementsIn1 = messages[1].length;
哪里messages.length
告诉您messages
拥有两个数组。数组数组。
然后,ANDmessages[x].length
生成0
1
里面每个单独数组的大小messages
。
numOfArraysIn = (int) 2
numOfElementsIn0 = (int) 6
numOfElementsIn1 = (int) 6
当我们为每个循环打印一个...时。
for (String str : messages[0])
System.out.print(str);
for (String str : messages[1])
System.out.print(str);
CATDOGYINBLACKHIGHDAYkittenpuppyyangwhitelownight
尝试放下括号并像这样打印会出现错误
for (String str : messages)
System.out.print(str);
incompatible types: String[] cannot be converted to String
在设置.length
用于限制通过数组的步长的循环时,理解以上内容非常重要。