怎么理解“多维数组的声明应按从高维到底维的顺序进行”。谢谢

解决方案 »

  1.   

    int a[][] = {{1,2},{4,6},{6,9}};
    java中多维数组的声明和初始化应按从高维到低维的顺序进行,例如:int a[][] = new int[3][];  // 
    a[0] = new int[2];   
    a[1] = new int[4];   
    a[2] = new int[6];   
    int t1[][] = new int[][4];//这是非法的   静态初始化:int a[][] = {{1,2},{4,6},{6,9}};   
    int a[3][2] = {{1,2},{4,6},{6,9}}; //非法   
      

  2.   

    int[][] a = new int[2][5];//正确
    int[][] a = new int[2][];//正确
    int[][] a = new int[][5];//错误
    就是java在定义数组的时候高纬度未定义长度的时候,无法定义低纬度的长度
      

  3.   

    “Java没有多维数组。”  ——引自《疯狂Java:突破程序员基本功的16课》第1课。Java里没有真正意义上的多维数组,它是用指针数组去模拟多维数组的。(没学过C/C++的可能不清楚指针是什么,在下这里说明白一点)
    int a[][];
    a也是个数组(Java里只有一维数组),a的元素是引用类型——整形数组int[]。可以称它为指向数组的数组。
    就像我们使用其它引用类型数组一样,要先初始化数组,才能使用数组元素:
    Student s[]=new Student[3];
    s[0]=new Student();
    ……
    指向数组的数组的情况一样:
    int a[][]=new int[3][];
    a[0]=new int[1];
    a[1]=new int[4];
    上面的例子就可以看出a不是二维数组了,与二维数组每行的列数必须一样这点不同,a的每行可以有不同的列数。至于上面给出的例子int[][] a=new int[2][5];其实是一种复合初始化。它实质上相当于:
    int a[][]=new int[2][];
    for(int[] i:a)
        a[i]=new int[5];
    以上处理过程由编译器代劳了。