- Java程序設計與實踐教程(第2版)
- 楊麗萍 王薇 張焱焱主編 北京云班科技有限公司副主編
- 1100字
- 2019-07-01 11:10:55
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
- C++程序設計教程
- C++面向?qū)ο蟪绦蛟O計(第三版)
- Facebook Application Development with Graph API Cookbook
- 精通JavaScript+jQuery:100%動態(tài)網(wǎng)頁設計密碼
- Android Jetpack開發(fā):原理解析與應用實戰(zhàn)
- Dynamics 365 Application Development
- Rake Task Management Essentials
- Three.js開發(fā)指南:基于WebGL和HTML5在網(wǎng)頁上渲染3D圖形和動畫(原書第3版)
- MATLAB 2020 從入門到精通
- Responsive Web Design by Example
- SharePoint Development with the SharePoint Framework
- Hands-On Natural Language Processing with Python
- Apache Kafka Quick Start Guide
- 機器學習與R語言實戰(zhàn)
- Python算法詳解