首页 理论教育 一维数组的声明、赋值和逆序输出

一维数组的声明、赋值和逆序输出

时间:2023-11-26 理论教育 版权反馈
【摘要】:一维数组是最简单的数组,其逻辑结构是线性表。另外,与C、C++不同,Java对数组元素要进行越界检查以保证安全性。声明一个一维数组,其长度为5,利用循环对数组元素进行赋值,然后再利用另一个循环逆序输出数组元素的内容。一维数组元素的引用格式如下:其中数组名是经过声明和初始化的标识符,数组下标是指元素在数组中的位置。

一维数组的声明、赋值和逆序输出

一维数组是最简单的数组,其逻辑结构是线性表。要使用一维数组,需要经过定义、初始化和应用等过程。

1.定义

使用数组,一般要经过三个步骤:声明数组,分配内存空间,数组元素赋值。前两个步骤的语法如下:

在数组的声明格式里,“数据类型”是声明数组元素的数据类型,可以是Java中任意的数据类型,包括简单类型和结构类型。“数组名”是用来统一这些相同数据类型的名称,其命名规则和变量的命名规则相同。“[]”指明该变量是一个数组类型变量,它可以放到数组名的前面,也可以放在数组名的后面。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此“[]”中不用给出数组中元素的个数(即数组的长度),但必须为它分配内存空间后才可使用。

数组声明之后,接下来便是要分配数组所需的内存,这时必须用运算符new,其中“个数”是告诉编译器所声明的数组要存放多少个元素。所以new运算符是通知编译器根据括号里的个数,在内存中分配一块空间供该数组使用。利用new运算符进行数组元素占用内存空间分配的方式称为动态内存分配方式

下面举例来说明数组的定义,例如:

在声明数组时,也可以将两个语句合并成一行,格式如下:

利用这种格式在声明数组的同时,也分配了一块内存供数组使用。如上面的两语句可以写成如下的一句:

等号左边的int[]相当于定义了一个特殊的变量符号x,x的数据类型是一个对int型数组对象的引用,x就是一个数组的引用变量,其引用的数组元素个数不定。等号右边的new int[10]就是在内存中创建一个具有10个int型变量的数组对象。“int x[]=new int[10];”就是将右边的数组对象赋值给左边的数组引用变量。若利用两行的格式来声明数组,其意义也是相同的。如执行第二句x=new int[10]后,在内存里创建了一个数组对象,为这个数组对象分配了10个整型单元,并将数组对象赋给了数组引用变量x。引用变量指向引用对象,就相当于C语言中的指针变量,而数组对象就是指针变量指向的那个内存块。所以说,在Java内部还是有指针的,只是把指针的概念对用户隐藏起来了,而用户所使用的是引用变量。

用户也可以改变x的值,使它指向另外一个数组对象,或者不指向任何数组对象。要想让x不指向任何数组对象,只需要将常量null赋给x即可,如x=null。

执行完x=null语句后,原来通过new int[10]产生的数组对象不再被任何引用变量所引用,也就成了垃圾,直到垃圾回收器来将它释放掉。

说明:数组用new运算符分配内存空间的同时,数组的每个元素都会被自动赋予一个默认值:整数为0,实数为0.0,字符为“\0”,boolean型为false,引用型为null。这是因为数组实际是一种引用型的变量,每个元素是引用型变量的成员变量。

2.访问

当定义了一个数组,并用运算符new为它分配了内存空间以后,就可以引用数组中的元素了。要想使用数组里的元素,可以利用数组名和下标来实现。数组元素的引用方式为:

其中“下标”可以是整型数或表达式,如a[3+i](i为整数)。Java数组的下标是从0开始的。如:

其中x[0]代表数组第1个元素,x[1]代表第2个元素,x[9]为第10个元素,也就是最后一个元素。另外,与C、C++不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,如x.length指出数组x所包含的元素个数。

【例3-1声明一个一维数组,其长度为5,利用循环对数组元素进行赋值,然后再利用另一个循环逆序输出数组元素的内容。程序代码如下:

运行结果如下:(www.xing528.com)

3.初始化

对数组元素的赋值,既可以使用单独方式进行(如上例),也可以在定义数组的同时就为数组元素分配空间并赋值。这种赋值方法,称为对数组的静态内存分配方式,也称为对数组的初始化。其格式如下:

大括号内的初值会依次赋值给数组的第1,2,…,n+1个元素。此外,在声明数组的时候,并不需要将数组元素的个数列出,编译器会根据所给的初值个数来决定数组的长度。如:

在上面的语句中,声明了一个整型数组a,虽然没有特别指明数组的长度,但是由于大括号里的初值有5个,编译器会分别依次指定各元素存放,a[0]为1,a[1]为2,…,a[4]为5。

注意:在Java语言中声明数组时,无论用何种方式定义数组,都不能指定其长度。如以“inta[5];”方式定义数组将是非法的,该语句在编译时将出错。

4.引用

当数组经过初始化后,就可以通过数组名和下标来引用数组中的每一个元素。一维数组元素的引用格式如下:

其中数组名是经过声明和初始化的标识符,数组下标是指元素在数组中的位置。数组下标的取值范围是0~(数组长度−1)。下标值可以是整型常量或整数型变量表达式。比如,下面的两句引用是合法的。

但下面的赋值引用

错误的。因为Java要对引用的数组元素进行下标是否越界的检查,在现在定义的数组A中不存在元素A[10]。下面给出数组引用的一些例子。

【例3-2】设数组中有n个互不相同的数,不用排序求出其中的最大值和次最大值。

运行结果如下:

【例3-3】约瑟夫环问题)设有N个人围坐一圈并按顺时针方向从1到N编号,从第s个人开始进行1到M报数,报数到第M的人,此人出圈,再从他的下一个人重新开始从1到M报数,如此进行下去直到所有人出圈为止。给出这N个人的出圈顺序。

程序运行后的输出结果如下:

出圈顺序为:

此题是著名的约瑟夫环问题。首先将每个人的编号存人数组,因为每次是从第S个人开始报数,若是直队的话,则下一个开始报数的人所在的数组下标是S+M-1,但这里是要建立一个环,即最后一个人报完数后下一个人接着报数。所以这时下一个开始报数的人所在的数组下标是(S+M-1)%i,其中i是此时圈中的总人数。若所得的结果为0,则说明要开始报数的人是最后一个人。在此人前面的那个人就是要出圈的人,使用循环将要出圈的人移至数组的最后,即将出圈人的顺序反向存入数组p中。开始时,总人数为N,以后依次减1,直到最后一个人出圈。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈