JAVA多维数组备考知识点解析2017
维数为二维或高于二维的数组称为多维数组,在java中并没有真正的多维数组,只有数组的数组。下面是小编整理的关于JAVA多维数组备考知识点解析,欢迎阅读!
(一) 二维数组的声明二维数组与一维数组的声明类似,只是需要用两个“[]”来表明是二维数组的声明,格式如下:
数据类型 数组名[][];
或
数据类型[][] 数组名;
或
数据类型[]数组名[];
其中:数据类型可以是java的基本类型和引用类型,数组名要求是一个合法的标识符,两个“[]”,表示是一个二维数组。
(二)二维数组的初始化同一维数组一样,只声明了数组,这时候其值为null,要想使用数组,还需要做初始化工作。数组初始化为声明的数组指定数组元素个数,为数组元素分配空间并赋值。数组初始化可以通过如下几种方式完成。
1. 用new关键字初始化数组
用关键字new初始化数组时,除了为数组指定数组元素个数、分配存储空间外,还会为数组元素按照数据类型的不同赋初值。具体如下:
若为数值型,数组元素的默认值为0,;
若为布尔型,数组元素的默认值为false;
若为引用型,数组元素的默认值为空(null)。
(1)先声明数组,在初始化数组。这里实际上是两条语句,具体格式如下:
数据类型[][] 数组名; 或数据类型 数组名[][];
数组名=new 数据类型[length1][length2];
第一条语句是数组声明语句,第二条语句则是初始化语句。要求这两条语句中数组名、数据类型必须一致。Length1指定数组的行数,length2指定数组的列数。
数组的Length1和Length2可以是直接的int类型常数,也可以是已经赋值的int类型变量或int类型表达式。
例如:
int m=3,n=2;
int[] a;
a = new int[m][n];
上面的语句声明并初始化一个3行两列的数组a,同时,根据默认值的约定,数组a中的所有元素初值均为0
(2)在声明数组的同时用new关键字初始化数组。实际上,这种方式是将第一种方式的两条语句合并为一条语句。格式如下:
数据类型[][] 数组名 =new 数据类型[length1][length2];
或
数据类型 数组名[][]=new 数据类型[length1][length2];
例如:
int m=3,n=2;
int[][] a = new int[m][n];
2.用一个已经初始化的数组对数组初始化
可以直接使用一个已经初始化的数组对新声明的数组进行初始化。
格式如下:
数据类型[][] 数组名=已初始化数组
例如:
Int[][]a=new int[10][10];
Int[][]b=a;
同一维数组一样,这种初始化会使得数组a与b具有相同的存储地址,a数组与b数组指向了同一个物理地址,任何对数组a的改变都会使数组b做相应的修改,同样,任何对数组b的修改也会使a数组的内容发生变化。
3.直接指定初值的方式
用直接指定初值的方式初始化数组是指在声明数组的同时将数组元素的初值依次写入赋值号(=)后的一对大括号({})内,大括号中的每个元素也是一对大括号。如:
int a [][] = {{1,2},{3,4},{5,6}};
这样就定义了一个3行2列的数组。
(三)不规则数组像其他语言一样,在定义二维数组时,我们可以使用“int a[][]=new int[3][2]”的方式创建3行2列的`数组,这样的数组是规则的,与数学上的矩阵一样。在java中我们还可以定义列数不同的数组,对于列数不同的数组称之为不规则数组。
不规则数组的定义有两种方式。
1.直接指定初值方式
如下语句:
int a [][] = {{1,2,3},{4,5},{6,7,8,9}};
就定义了一个不规则数组,这样,数组中各元素包括:
a[0][0], a[0][1], a[0][2],
a[1][0], a[1][1],
a[2][0], a[2][1], a[2][2], a[2][3],
其他元素的访问则会导致数组下标异常错误,如
tln(a[0][3]);
tln(a[1][2]);
tln(a[1][3]);
都会产生异常
2.用new关键字初始化数组
除了直接指定初值的方式外,还可以使用new关键字创建不规则数组,如下语句同样创建了一个不规则数组:
int[ ][ ] arr=new int[3][];
arr[0]=new int[3];
arr[1]=new int[2];
arr[2]=new int[4];
这里需要注意的是“int[ ][ ] arr=new int[3][];”语句与C++的定义方式正好相反,在C++中,数组的定义形式为“int[ ][ ] arr=new int[][3];”,读者一定不要混淆。
不规则数组的好处是可以节省存储空间,对于列不是完全相同的时候可以使用,在下面的杨辉三角形的例子中使用的就是不规则数组。
(四)二维数组应用1.二维数组元素的遍历
在一维数组中,遍历数组元素使用如下语句:
for(int i=0;i
tln(a[i]);
}
在二维数组中可以使用如下语句遍历数组元素:
for(int i=0;i
for(int j=0;j
t(a[i][j]+'n');
}
tln();
}
特别注意,因为在二维数组中存在不规则数组的情况,所以在访问时需要使用a[i]th的方式来限定二维数组第二维的元素个数,否则会发生数组下标异常错误。
2.利用不规则数组实现杨辉三角形
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其形式如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我们可以利用java的不规则数组来存储这些信息,其运算规律为: a[m][n]=a[m-1][n-1]+a[m-1][n];当m=n或者n=0时,杨辉三角形的元素a[m][n]=1;否则,杨辉三角形的元素a[m,n]=a[m-1,n-1]+a[m-1,n] 。其中,m,n为三角形的行和列,均从0开始。
程序如下:
[例5-12]
class YangHui {
public void paint(int n){//输出杨辉三角形的值,n为行数
int a[][]=new int[n][];
for(int i=0;i
a[i]=new int[i+1];//定义不规则数组
}
for(int i=0;i
for(int j=0;j
if(i==j||j==0){
a[i][j]=1;
}
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
//不规则数组的输出
for(int i=0;i
for(int j=0;j
t(a[i][j]+" ");
}
tln();//输出换行
}
}
}
public class Test5_12 {
public static void main(String[] args) {
YangHui yh = new YangHui();
t(10);
}
}
运行结果如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
读者可以通过t(n)的方式很方便的输出具有n行杨辉三角形的数据。读者也可以试着修改例[5-12]让其显示效果更好(如显示效果为一个等腰三角形)。
小结
本章对数组这种引用数据类型做了较详细的介绍,对数组的声明、初始化及数组元素的使用做了详细的说明,并给出了一维数组的几个典型的应用,在二维数组的中特别指出了Java数组与其他编程语言的不同,给出了不规则数组的概念,并给出了一个不规则数组的具体应用实例。
-
Java 正则表达式
Java是一门编程语言,那么大家知道Java正则表达式是怎样的呢?下面一起来看看!Java正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其...
-
Java中的对象与引用知识详解
在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别和联系。以下仅供参考!1.何谓对象?在Java中有一句比较流行的话,叫...
-
java日期时间基本操作方法
1.获得Calendar实例:Calendarc=nstance();2.定义日期/时间的格式:SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");3.把日期/时间转换成固定格式,使用SimpleDateFormat的'format()方法:Stringdatetime=at(ime());4.把字符串转换成日期/时间,...
-
Java发展史之Java的由来
Java发展史之Java的由来Java:由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发,它最初被命名为...