官术网_书友最值得收藏!

4.2 多維數(shù)組

在Java語言中,并沒有一般程序設計語言中的多維數(shù)組,但可以實現(xiàn)與多維數(shù)組相應的功能,它是把多維數(shù)組看成數(shù)組的數(shù)組。例如,二維數(shù)組是一個特殊的一維數(shù)組,其每一個元素又是一個一維數(shù)組。由于在Java中,需要為數(shù)組元素分配相應的空間,分配空間可在定義數(shù)組的同時進行,也可用new操作符為數(shù)組元素分配內(nèi)存地址,就造成多維數(shù)組中每維數(shù)組的長度可以不同,數(shù)組空間也不是連續(xù)分配的(當然一維數(shù)組的空間仍然是連續(xù)分配的)。

本節(jié)將以二維數(shù)組為例說明多維數(shù)組的使用方法。

4.2.1 二維數(shù)組聲明與初始化

二維數(shù)組聲明的語法格式如下:

        數(shù)組類型多維數(shù)組名[][];

        數(shù)組類型[][]  多維數(shù)組名;

其中,數(shù)組類型可以是Java中任意的數(shù)據(jù)類型;數(shù)組名為一個合法的標識符。例如,“int array[][]; ”或“int [][] array; ”都是合法的聲明方式。

與一維數(shù)組一樣,聲明二維數(shù)組時也沒有對數(shù)組元素分配內(nèi)存空間,同樣要使用運算符new來分配內(nèi)存,然后才可以訪問每一個數(shù)組元素。當給多維數(shù)組分配內(nèi)存時,只需指定第一個(最左邊)維數(shù)的內(nèi)存即可。分配內(nèi)存空間有下面幾種方法。

(1)直接為每一維分配空間,例如:

        int  array[][]=new  int[2][3];

(2)從最高維開始,分別為每一維分配內(nèi)存空間,例如:

        int  array[][]=new int[2][];
        array[0]=new  int[3];
        array[1]=new  int[3];

此例完成與上例相同的功能。這點與C/C++語言不同,在C/C++語言中必須一次指明每一維的長度。

再如:

        int myarray[][]=new int[3][];  //生成含3個一維數(shù)組的數(shù)組myarray
        myarray[0]=new int[2];         //生成myarray的第0維的一維數(shù)組
                                        //myarray[0]含2個int型分量值初始化為0
        myarray[1]=new int[4];         //生成myarray的第1維的一維數(shù)組
                                        //myarray[1]含4個int型分量值初始化為0
        myarray[2]=new  int[2];        //生成myarray的第2維的一維數(shù)組
                                        //myarray[2]含2個int型分量值初始化為0

其內(nèi)存分配如圖4-1所示。

圖4-1 多維數(shù)組內(nèi)存分配示意圖

在Java語言中,從最高維至低維分配空間。分配時當前最高維必須指定長度,其余低維可不指定長度;但不允許最高維不指定長度而其余低維指定長度。

例如:

        int  array=new  int[2][];     //正確的方法
        int  array=new  int[2][3];    //正確的方法
        int  array=new  int[][4];     //不正確的方法

在聲明多維數(shù)組的同時可以對數(shù)組元素進行初始化,例如:

        int  array[][]={{1,2}, {3,4,5}, {6,7}};

這里不必指出數(shù)組每一維的大小,系統(tǒng)會根據(jù)初始化的初值個數(shù)算出數(shù)組每一維的大小,并為數(shù)組及其元素分配相應的空間。

4.2.2 二維數(shù)組元素的引用

訪問二維數(shù)組中的每一個元素的語法格式如下:

        數(shù)組名稱[index1][index2];

其中,index1和index2為數(shù)組下標,可以是整型常數(shù)或表達式。例如,“Myarray[0][5*i+1]; ”。同樣,每一維的下標只能從0開始到該維的長度減1。

例4-2】 兩個矩陣相加,是指對應行列值的位置數(shù)據(jù)相加。在這里,矩陣用二維數(shù)組存儲。

        //文件名:MatrixAddition.java
        public  class  MatrixAddition{
            public static void main(String args[]){
                int i, j;
                //動態(tài)初始化一個二維數(shù)組
                int a[][]=new int [3][4];
                //靜態(tài)初始化一個二維數(shù)組
                int b[][]={{1,5,2,8}, {5,9,10, -3}, {2,7, -5, -18}};
                //動態(tài)初始化一個二維數(shù)組
                int c[][]=new int[3][4];
                for (i=0; i<3; i++)
                    for (j=0; j<4 ; j++)
                        a[i][j]=(i+1)*(j+2);
                for (i=0; i<a.length; i++)
                    for (j=0; j<a[i].length; j++)
                        c[i][j]=a[i][j]+b[i][j];
                //打印Matrix C標記
                System.out.println("*******Matrix C********");
                for(i=0; i<c.length; i++){
                    for (j=0; j<c[i].length; j++)
                        System.out.print(c[i][j]+"");
                    System.out.println();
                }
            }
        }

程序的運行結(jié)果如下:

      *******Matrix C********
      3 8 6 13
      9 15 18 7
      8 16 7-3
主站蜘蛛池模板: 砚山县| 盐池县| 眉山市| 辽宁省| 枞阳县| 鹤山市| 揭东县| 西城区| 比如县| 海盐县| 任丘市| 那坡县| 东丽区| 稻城县| 伊春市| 泰宁县| 三门峡市| 紫金县| 合川市| 静海县| 沽源县| 乌拉特后旗| 鹤岗市| 饶平县| 东海县| 庐江县| 申扎县| 许昌市| 绍兴县| 徐闻县| 北海市| 商河县| 无极县| 车致| 新田县| 磐安县| 珠海市| 旌德县| 达州市| 阿荣旗| 玉环县|