更改多维数组的一行长度?

时间:2012-11-30 15:56:35

标签: java arrays multidimensional-array

class B {
    public static void main(String a[])
    {
        int x;
        String aa[][]= new String[2][2];
        aa[0]=a;
        x=aa[0].length;
        for(int y=0;y<x;y++)
            System.out.print(" "+aa[0][y]);
    }
}

并且命令行调用是

>java B 1 2 3

,选项是

  

1。)0 0

     

2。)1 2

     

3。)0 0 0

     

4。)1 2 3

我告诉第二个选项是正确的,因为数组是用[2][2]声明的,所以它不能像[0][2]那样。但是,答案是1 2 3。任何人解释一下,这是怎么发生的?

2 个答案:

答案 0 :(得分:7)

程序的参数存储在aa[0]中,这是一个数组,因为aa是一个数组数组。

所以程序只是迭代main方法的参数。它打印1, 2, 3(它不关心aa[1])。

int x;
String aa[][]= new String[2][2]; // create an matrix of size 2x2
aa[0]=a; // store the program arguments into the first row of aa 
x=aa[0].length; // store the length of aa[0] which is the same as a
for(int y=0;y<x;y++) // iterate over aa[0] which is the same as a
    System.out.print(" "+aa[0][y]);

在功能上与:

相同
for (int i = 0; i < a.length; ++i)
    System.out.print(" " + a[i]);
// or even
for (String str: a)
    System.out.print(" " + str);

修改

如前所述,有人已经删除了他的答案(你不应该,我在删除它的时候就是支持它),java多维数组是锯齿状数组,这意味着多维数组不必具有相同的尺寸,您可以使第1行和第2行具有2种不同的尺寸。因此,这意味着声明String[2][2]并不意味着当您重新分配行时,行只需要限制为两列。

String[][] ma = new String[3][2];
ma[0] = new String[] {"a", "b"};
ma[1] = new String[] {"a", "b", "c", "d"}; // valid
String[] foo = new String {"1", "3", "33", "e", "ff", "eee"};
ma[2] = foo; // valid also

答案 1 :(得分:0)

变量aa被声明为字符串数组的数组,而不是简单的多维数组。设置aa[0] = a时,您将数组数组的第一个元素设置为作为参数传递的字符串数组。因此,当您遍历aa[0]项时,您正在遍历aa[0] = a语句中放置的项目。