1.2⼀维数组的定义、赋值和初始化
当数组中每个元素都只带有⼀个下标时,这种数组就是“⼀维数组”。⼀维数组(one-dimensional array)实质上是⼀组相同类型数据的线性集合,是数组中最简单的⼀种数组。
数组是引⽤数据类型,引⽤数据类型在使⽤之前⼀定要做两件事情:声明和初始化。所以本⽂将重点介绍⼀维数组的创建、初始化和使⽤。创建⼀维数组
为了在程序中使⽤⼀个数组,必须声明⼀个引⽤该数组的变量,并指明整个变量可以引⽤的数组类型。声明⼀维数组的语法格式为:
type[] arrayName;// 数据类型[] 数组名;  建议⽤这个
或者
type arrayName[];// 数据类型数组名[];
可见数组的声明有两种形式:⼀种是中括号”[]“跟在元素数据类型之后,另⼀种是中括号”[]“跟在变量名之后。
对于以上两种语法格式⽽⾔,Java 更推荐采⽤第⼀种声明格式,因为第⼀种格式不仅具有更好的语意,⽽且具有更好的可读性。对于第⼀种格式type[] arrayName,很容易理解这是定义⼀个变量,其中变量名是 arrayName,⽽变量类型是 type[]。
前⾯已经指出:type[] 确实是⼀种新类型,与 type 类型完全不同(例如 int 类型是基本类型,但 int[] 是引⽤类型)。因此,这种⽅式既容易理解,也符合定义变量的语法。但第⼆种格式type arrayName[]的可读性就差了,看起来好像定义了⼀个类型为 type 的变量,⽽变量名是 arrayName[],这与真实的含义相去甚远。
可能有些读者⾮常喜欢type arrayName[]这种定义数组的⽅式,这可能是因为早期某些计算机读物的误导,从现在开始最好就不要再使⽤这种糟糕的⽅式了。
以上两种格式都可以声明⼀个数组,其中的数据类型既可以是基本数据类型,也可以是引⽤数据类型。数组名可以是任意合法的变量名。声明数组就是要告诉计算机该数组中数据的类型是什么。例如:
int[] score;// 存储学⽣的成绩,类型为整型
double[] price;// 存储商品的价格,类型为浮点型
String[] name;// 存储商品名称,类型为字符串型
在声明数组时不需要规定数组的长度,例如:
int score[10];// 这是错误的
注意:在声明数组变量时千万不要漏写[]。
分配空间
声明了数组,只是得到了⼀个存放数组的变量,并没有为数组元素分配内存空间,不能使⽤。因此要为数组分配内存空间,这样数组的每⼀个元素才有⼀个空间进⾏存储。
简单地说,分配空间就是要告诉计算机在内存中为它分配⼏个连续的位置来存储数据。在 Java 中可以使⽤ new 关键字来给数组分配空间。分配空间的语法格式如下:
arrayName =new type[size];// 数组名 = new 数据类型[数组长度];
其中,数组长度就是数组中能存放的元素个数,显然应该为⼤于 0 的整数,例如:
score =new int[10];
price =new double[30];
name =new String[20];
这⾥的 score 是已经声明过的 int[] 类型的变量,当然也可以在声明数组时就给它分配空间,语法格式如下:
type[] arrayName =new type[size];// 数据类型[] 数组名 = new 数据类型[数组长度];
例 1
例如,声明并分配⼀个长度为 5 的 int 类型数组 arr,代码如下:
int[] arr =new int[5];
执⾏后 arr 数组在内存中的格式如图 1 所⽰。
在图 1 中 arr 为数组名称,⽅括号“[]”中的值为数组的下标。数组通过下标来区分数组中不同的元素,并且下标是从 0 开始的。因此这⾥包含 5 个元素的 arr 数组最⼤下标为 4。
注意:⼀旦声明了数组的⼤⼩,就不能再修改。这⾥的数组长度也是必需的,不能少。
尽管数组可以存储⼀组基本数据类型的元素,但是数组整体属于引⽤数据类型。当声明⼀个数组变量时,其实是创建了⼀个类型为“数据类型[]”(如 int[]、double[]、String[])的数组对象,它具有表 1 所⽰的⽅法和属性。
初始化⼀维数组
Java 语⾔中数组必须先初始化,然后才可以使⽤。所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
能不能只分配内存空间,不赋初始值呢?
不⾏,⼀旦为数组的每个数组元素分配了内存空间,每个内存空间⾥存储的内容就是该数组元素的值,即使这个内存空间存储的内容为空,这个空也是⼀个值(null)。不管以哪种⽅式来初始化数组,只要为数组元素分配了内存空间,数组元素就具有了初始值。初始值的获得有两种形式,⼀种由系统⾃动分配,另⼀种由程序员指定。
数组在初始化数组的同时,可以指定数组的⼤⼩,也可以分别初始化数组中的每⼀个元素。在 Java 语⾔中,初始化数组有以下 3 种⽅式。
1)使⽤ new 指定数组⼤⼩后进⾏初始化
使⽤ new 关键字创建数组,在创建时指定数组的⼤⼩。语法如下:
type[] arrayName =new int[size];
创建数组之后,元素的值并不确定,需要为每⼀个数组的元素进⾏赋值,其下标从 0 开始。
例 2
创建包含 5 个元素的 int 类型的数组,然后分别将元素的值设置为 1、2、3、5 和 8。代码如下:
int[] number =new int[5];
number[0]=1;
number[1]=2;
number[2]=3;
number[3]=5;
number[4]=8;
如果程序员只指定了数组的长度,那么系统将负责为这些数组元素分配初始值。指定初始值时,系统按如下规则分配初始值。
数组元素的类型是基本类型中的整数类型(byte、short、int 和 long),则数组元素的值是 0。
数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是 0.0。
数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u0000’。
数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是 false。
数组元素的类型是引⽤类型(类、接⼝和数组),则数组元素的值是 null。
2)使⽤ new 指定数组元素的值
使⽤上述⽅式初始化数组时,只有在为元素赋值时才确定值。可以不使⽤上述⽅式,⽽是在初始化时就已经确定值。语法如下:
type[] arrayName =new type[]{值1,值2,值3,值4,• • •,值 n};
例 3
更改例 2 中的代码,使⽤ new 直接指定数组元素的值。代码如下:
int[] number =new int[]{1,2,3,5,8};
上述代码的效果等价于例 2 的效果。
注意:不要在进⾏数组初始化时,既指定数组的长度,也为每个数组元素分配初始值,这样会造成代码错误。例如下⾯代码:
int[] number =new int [5]{1,2,3,4,5};
3)直接指定数组元素的值
在上述两种⽅式的语法中,type 可以省略,如果已经声明数组变量,那么直接使⽤这两种⽅式进⾏初始化。如果不想使⽤上述两种⽅式,那么可以不使⽤ new 直接指定数组元素的值。语法如下:
type[] arrayName ={值1,值2,值3,...,值 n};
例 4
在前⾯例⼦的基础上更改代码,直接使⽤上述语法实现 number 数组的初始化。代码如下:
int[] number ={1,2,3,5,8};
使⽤这种⽅式时,数组的声明和初始化操作要同步,即不能省略数组变量的类型。如下的代码就是错误的:
int[] number;
number ={1,2,3,5,8};
获取单个元素
获取单个元素是指获取数组中的⼀个元素,如第⼀个元素或最后⼀个元素。获取单个元素的⽅法⾮常简单,指定元素所在数组的下标即可。语法如下:
arrayName[index];
其中,arrayName 表⽰数组变量,index 表⽰下标,下标为 0 表⽰获取第⼀个元素,下标为 array.length-1 表⽰获取最后⼀个元素。当指定的下标值超出数组的总长度时,会拋出 ArraylndexOutOfBoundsException 异常。
例 5
获取 number 数组中的第⼀个元素、最后⼀个元素和第六个元素,并将元素的值输出。代码如下:
int[] number ={1,2,3,5,8};
System.out.println("获取第⼀个元素:"+number[0]);
System.out.println("获取最后⼀个元素:"+number[number.length-1]);
System.out.println("获取第6个元素:"+number[5]);
执⾏上述代码,输出结果如下所⽰:
获取第⼀个元素:1
获取最后⼀个元素:8
java.lang.ArrayIndexOutOfBoundsException:5
我们⼀共存⼊了 5 个值,所以下标的取值为 0~4。因为 number[5] 取出的内容超过了这个下标,所以输出结果会提⽰数组索引超出绑定异常(ArrayIndexOutOfBoundsException)。这⼀点是在使⽤数组中是经常出现的问题,⼤家在编写程序时应该引起注意。
例 6
编写⼀个 Java 程序,使⽤数组存放录⼊的 5 件商品价格,然后使⽤下标访问第 3 个元素的值。
import java.util.Scanner;
public class Test {
public static void main(String[] args){
int[] prices =new int[5];// 声明数组并分配空间
Scanner input =new Scanner(System.in);// 接收⽤户从控制台输⼊的数据
for(int i =0; i < prices.length; i++){
System.out.println("请输⼊第"+(i +1)+"件商品的价格:");
prices[i]= Int();// 接收⽤户从控制台输⼊的数据
}
System.out.println("第 3 件商品的价格为:"+ prices[2]);
}
}
上述代码的“int[] prices = new int[5]”语句创建了需要 5 个元素空间的 prices 数组,然后结合 for 循环向数组中的每个元素赋值。
注意:在 Java 中取得数组的长度(也就是数组元素的长度)可以利⽤“数组名称.length”,返回⼀个 int 型数据。
数组的索引从 0 开始,⽽ for 循环中的变量 i 也从 0 开始,因此 score 数组中的元素可以使⽤ scored 来表⽰,⼤⼤简化了代码。最后使⽤ prices[2] 获取 prices 数组的第 3 个元素,最终运⾏效果如下所⽰。
请输⼊第1件商品的价格:
5
请输⼊第2件商品的价格:
4
请输⼊第3件商品的价格:
6
请输⼊第4件商品的价格:
4
请输⼊第5件商品的价格:
数组全部赋值为18
第3件商品的价格为:6
获取全部元素
当数组中的元素数量不多时,要获取数组中的全部元素,可以使⽤下标逐个获取元素。但是,如果数组中的元素过多,再使⽤单个下标则显得烦琐,此时使⽤⼀种简单的⽅法可以获取全部元素——使⽤循环语句。
下⾯利⽤ for 循环语句遍历 number 数组中的全部元素,并将元素的值输出。代码如下:
int[] number ={1,2,3,5,8};
for(int i=0;i<number.length;i++){
System.out.println("第"+(i+1)+"个元素的值是:"+number[i]);
}
除了使⽤ for 语句,还可以使⽤ foreach 遍历数组中的元素,并将元素的值输出。代码如下:
for(int val:number){
System.out.print("元素的值依次是:"+val+"\t");
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。