在基本2D字符串数组的嵌套for
循环中,我遇到了这个:
array = new String [5][10];
for(int i=0; i<array.length;i++)
{
for(int j=0; j<array[0].length;j++)
{
System.out.print(array[i][j]="*");
}
System.out.println("");
}
现在这就是我想知道的,为什么第二个for
语句包含array[0].length
而不是array.length
之前的for
语句?
我可以在实验过程中从中提取所有for
语句包含array.length
且2D数组是5x10,它会将其打印为5x5,但是array[0].length
它会打印正确的5x10。
那为什么这个小调整能解决所有问题?
答案 0 :(得分:5)
您正在处理 2D 数组。 array.length
本质上为您提供了行数,但array[0].length
给出了列的数量(至少对于非锯齿状数组而言)。举个例子:
String[][] array = new String[][]{
{"1","2"},
{"3","4"},
{"5","6"}
};
此处array.length
为3
(整个2D数组由三个 1D阵列组成),但array[0].length
为2
( 每个组成数组的长度)。您的第一个for
- 循环遍历整个数组数组,但您的第二个循环遍历外部循环遇到的每个组成数组。因此,内部循环应该只循环到(但不包括) array[0].length
。
答案 1 :(得分:4)
Aa 2D数组就像一个矩阵,由String
个对象数组表示。定义时:
array = new String [5][10];
你说的是“我想要一个长度为10的5个字符串数组的数组”,如下所示:
[String[10]][String[10]][String[10]][String[10]][String[10]]
下面:
for(int i=0; i<array.length;i++)
{
for(int j=0; j<array[0].length;j++) //I'd recommend j < array[i] here. Nothing
//changes on this case, but it would bring
//some trouble if the second dimention of the
//array was not the same for every case.
{
System.out.print(array[i][j]="*");
}
System.out.println("");
}
第一个用于遍历五个String
数组的数组,这就是为什么我从0
转到4
并且数组的长度为5.第二个用于迭代索引第一个数组中包含的String[]
个对象(长度为5
的对象)。此数组的长度为10
个元素。
答案 2 :(得分:0)
这是因为array[0]
实际上是String[]
数组。
答案 3 :(得分:0)
需要第二个for
语句来获取数组中的列数,在本例中为10。
array.length
- 没有。行array[0].length
- 没有列此数组假定为方形而不是锯齿状,因此在此示例中使用array[0]
被认为是安全的。
让我们看一下错误的方式: 通过这样做:
for (int i=0; i<array.length;i++) {
for(int j=0; j < array.length;j++) {
System.out.print(array[i][j]="*");
}
}
您只显示5 x 5个条目,缺少一半条目数。此外,如果数组最初是10行x 5列,则ArrayIndexOutOfBoundsException
会因j = 5
时超过列数而被抛出。
显示2D数组的便捷方法是:
System.out.println(Arrays.deepToString(array));