第5章 数组与字符串
我们在前面学习的整形、字符型等都是基本数据类型,通过一个变量表示一个数据,这种变量称为简单变量。在实际应用中,经常需要处理具有相同性质的一批数据。例如要处理100个学生的考试成绩,如果要使用简单变量,将需要100个变量,极不方便。为此,在Java中,除简单变量外,还引进了数组,即用一个变量表示一组相同性质的数据。数组必须先经过声明和初始化后才能使用。
5.1 一维数组
数组是用一个变量名表示一组数据,每个数据称为数组元素,各元素通过下标来区分。如果用一个下标就能确定数组中的不同元素,这种数组称为一维数组,否则称为多维数组。
5.1.1 一维数组的声明
声明一个数组就是要确定数组名、数组的维数和数组元素的数据类型。
一维数组声明的格式为:
类型标识符 数组名【】
或
类型标识符【】 数组名
类型标识符指定每个元素的数据类型,如int表明数组中的每个元素都是整型数。
说明:
(1) 数组名的命名方法同简单变量,可以是任意合法的标识符。取名是最好符合“见名知意”的原则。
(2) 类型标识符可以是任意的基本类型,如int、long、float和double,也可以是类或接口。
例如,要表示学生的成绩(整数),可以声明元素的数据类型为整数的数组score,其声明如下:
int score【】
该声明表示数组的名字为score,每个元素为整型数。
要表示学生的体重(浮点数),可以声明元素的数据类型为float的数组weight,其声明如下:
float【】 weight
5.1.2 一维数组的初始化
声明一个数组仅为数组指定了数组名和元素的数据类型,并未指定数组的元素个数,系统无法为数组分配存储空间。要让系统为数组分配存储空间,必须指出数组元素的个数,该工作在数组初始化时进行。数组经过初始化后,其元素的个数、所占用的存储空间就决定下来。数组的初始化工作可以通过new操作符完成,也可以通过给元素赋初始值进行。
1. 用new初始化数组
用new关键字初始化数组,只指定数组元素的个数,为数组分配存储空间,并不给数组元素赋初始值。通过new关键字初始化数组有两种:先声明数组再初始化和声明的同时进行初始化。
(1) 先声明数组再初始化
先声明数组再初始化是通过两条语句来实现的,第一条语句是声明数组,第二条语句用new关键字初始化数组。
用new关键字初始化数组的格式如下:
数组名=new 类型标识符【元素个数】
元素个数通过整型常量来表示。
例如:要表示10个学生的成绩(整数),可以先声明元素的数据类型为整数score,再用new关键字初始化该数组。
int score[];
score=new int[10];
数组中各元素通过下标来区分,下标的最小值为0,最大值比元素个数少1。对于前面初始
化的数组score,其10个元素分别为score[0],score[2],score[3],···,score[9]。系统为数组的10个元素分配存储空间,形式如表5-1所示:
表5-1 一维数组
score[0] | score[1] | score[2] | score[3] | score[4] | score[5] | score[6] | score[7] | score[8] | score[9] |
各元素的元素空间是连续的。
初始化数组后,如果想知道其元素个数,可以通过属性length获得。其格式为:
数组名·length
例如,对于前面初始化的数组score和weight,score·length和weight·length的值分别为10和15.
数组下标可以使用变量,所以数组和循环语句结合使用,使得程序书写简洁,操作方便。
例如,要计算100个学生的平均成绩,可以使用以下的程序段。
float sum;
int i;
int score[];
score=new int[100]; //输入数组各元素的值
sum=0;
for(i=0;i<100;i++)
sum=sum+score[i];
sum=sum/100;
(2) 声明的同时进行初始化
可以用一条语句声明并初始化数组,即将上面的两条语句合并为一条语句。其格式如下:
类型标识符[] 数组名=new 类型标识符[元素个数]
例如,要表示10个学生的学号,可以按以下方法声明并初始化数组no:
int no[]=new int[10];
2. 赋初值初始化数组
可以在声明数组的同时,给数组元素赋初值。所赋初值的个数决定数组元素的数目。其格式如下:
类型标识符 数组名={初值表}
初值表是用逗号隔开的初始值。
例如:int score[]={65,34,78,81,56,92,56,87,90,77};
该语句声明了一个数组score,其元素类型为int,因为初始值的各数为10,所以数组有10个元素,并且10个元素score[0],score[1],score[2],···,score[9]的初始值分别为65,34,78,···,77,如同5-1所示。
score[0] | score[1] | score[2] | score[3] | score[4] | score[5] | score[6] | score[7] | score[8] | score[9] |
65 | 34 | 78 | 81 | 56 | 92 | 56 | 87 | 90 | 77 |
图5-1 初始化数组
5.2 多维数组
日常工作中涉及到许多数据是由若干行和若干列所组成,例如行列式、矩阵、二维表格等待,为了描述和处理其中的一个数据,需要两个下标,即行标和列标。有些情况下,可以需要三个或多个下标,如描述三维空间中各点的温度需要三个下标。为了解决这一类问题,在Java中可以使用多维数组,即每个元素需要两个或多个下标来描述数组。正像一维数组,多维数组在使用前也必须进行声明和初始化,且声明和初始化的方法于一维数组类似。下面以二维数组为例,说明多维数组的使用方法,三维或三维以上的数组用法类似。
5.2.1 二维数组的声明
二维数组的声明方法与一维数组类似,只是要给出两队方括号。二维数组声明形式如下:
类型标识符 数组名[][]
或
类型标识符[][] 数组名
其中的类型标识符表示每个元素的数据类型
声明:
(1) 数组名的命名方法同简单变量,可以是任意合法的标识符。取名时最好符号“见名知意”的原则。
(2) 类型标识符可以是任意的基本类型,如int、long、float和double,也可以是类或接口。
(3) 对于多维数组,只需在数组名或类型标识符的后面放置多对方括号。
实数上,很少用到三维或更高维数的数组。
例如,要表示每个数据为整型数的行列式,可以声明如下二维数组:
int a[][];
5.2.2 二维数组的初始化
声明一个二维数组仅为数组指定了数组名和元素的数据类型,并未指定数组的行数和列数,系统无法为数组分配存储空间。要让系统为数组分配存储空间,必须指出数组的行数和列数,该工作在数组初始化时进行。二维数组经过初始化后,其元素的个数、所占的存储空间就确定下来。数组的初始化可以通过new操作符完成,也可以通过给元素赋初值进行。
1. 用new初始化二维数组
用new关键字初始化二维数组,只指定数组行数和列数,为数组分配存储空间,并不给数组元素赋初始值。通过new关键字初始化数组有两种方式:先声明数组再初始化和在声明的同时进行初始化。
(1) 先声明数组再初始化
先声明数组再初始化是通过两条语句来实现的,第一条语句声明数组,第二条语句用new关键字初始化数组。
用new关键字初始化数组的格式如下:
数组名=new 类型标识符【行数】【列数】
行数和列数通过整型常量来表示。元素的个数等于行数与列数的乘积。
例如,要表示每个数据为整型数的三行、四列的行列式,可以先声明元素的数据类型为整型的数组a,再用new关键字初始化该数组。
int a【】【】;
a=new int【3】【4】;
数组中各元素通过两个下标来区分,每个下标的最小值为0,最大值分别比行数和列数少1.对于前面初始化的数组a,其12个元素分别为a【0】【0】,a【0】【1】,a【0】【2】,a【0】【3】,a【1】【0】,a【1】【1】,···a【2】【3】。系统为该数组的12个元素分配存储空间,形式如表5-2所示。
表5-2 二维数组
a【0】【0】 a【0】【1】 a【0】【2】 a【0】【3】
a【1】【0】 a【1】【1】 a【1】【2】 a【1】【3】
a【2java定义一维数组并赋值】【0】 a【2】【1】 a【2】【2】 a【2】【3】
各元素的存储空间是连续的。
初始化数组后,如果想知道行数和列数,可以通过属性length获得。
数组名·length
获取数组列数的格式为:
数组名【行标】·length
二维数组的下标可以使用变量,所以二维数组和循环语句结合使用,使得程序书写简洁,操作方便。
在Java中,二维数组是作为一维数组来处理的,只是其每个元素本身又是个一维数组。例
如,前面初始化的数组a可以看做一维数组,共有3个元素a【0】、a【1】和a【2】,只不过每个元素本身又是一个一维数组。a【0】的4个元素分别是a【0】【0】、a【0】【1】、a【0】【2】和a【0】【3】,a【1】的4个元素分别是a【1】【0】、a【1】【1】、a【1】【2】和a【1】【3】,a【2】的4个元素分别是a【2】【0】、a【2】【1】、a【2】【2】和a【2】【3】。
由于Java将二维数组当做一维数组来处理,所以在进行初始化的时候,可以各行单独进行,也允许各行的元素个数不同。
例如,要表示实型数的二行、三行行列式b,可以按照以下方式进行声明和初始化:
float【】【】 b
b=new int【2】【】; //将b初始化为两行二维数组
b【0】=new int【3】; //将b【0】初始化三个元素
b【1】=new int【3】; //将b【1】初始化三个元素
再例如,要使用具有三行元素,第一行1个元素、第二行3个元素、第三行5个元素的二维数组c,可以按照以下方式进行声明和初始化:
int c【】【】;
c=new int【3】【】; //将c初始化为三行二维数组
for(int i=0;i<3;i++)
c【i】=new int【2·i+1】;
(2) 赋初值初始化数组
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论