需要对2D String数组进行一些解释

时间:2012-11-14 00:55:08

标签: java arrays eclipse

在基本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。

那为什么这个小调整能解决所有问题?

4 个答案:

答案 0 :(得分:5)

您正在处理 2D 数组。 array.length本质上为您提供了行数,但array[0].length给出了列的数量(至少对于非锯齿状数组而言)。举个例子:

String[][] array = new String[][]{
    {"1","2"},
    {"3","4"},
    {"5","6"}
};

此处array.length3(整个2D数组由三个 1D阵列组成),但array[0].length2每个组成数组的长度)。您的第一个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));