数组
举个例子,假如一个班有30个学生,每个学生都需要记录成绩。如果我们定义30个变量来保存成绩,就会很麻烦。当我们需要记录比较多同种类的数据的时候,使用变量去一个个记录工程量很大,这时候我们就可以通过数组去解决这个问题。
数组是存储一组相同数据类型的数据(变量)的一个变量。
数组的概念
数组包括5个基本要素:
1、标识符。也可以叫做数组名,类似于变量中的变量名。
2、数组元素。一个数组是由多个相同数据类型的数据组成的,里面每一个数据都是一个数组元素。
3、数组长度。一个数组中一共有多少个数据,这个数组的数组长度就为多少。
4、元素下标。数组中的每个元素都有按排序进行编号,这个编号是从0开始,到数组长度-1为止,这种编号叫做元素下标。
5、元素类型。我们在声明数组的时候,数组是什么数据类型,那数组里的所有元素就必须是和数组相同的数据类型。
定义数组
在程序中去定义一个数组,通常分为4个步骤:
1、声明数组。
声明数组的语法有两种格式,分别为:
数据类型[] 数组名;
或 数据类型 数组名[];
两种格式都是可以使用的,但通常规范上提倡使用第一种,也就是 数据类型[] 数组名;
例如:
int[] scores;
int scores[];
Srting[] names;
2、分配空间。
确定数组中一共有多少个数据,例如:
scores = new int[30];
avgAge= new int[6];
names= new String[30];
分配完空间后,里面每个数据都会有个默认初始值。如果是整型的数组,里面所有元素初始值都为0;浮点型的数组,里面所有元素的初始值都为0.0;如果是字符串类型的数组,里面所有元素的初始值都为null。
声明数组和分配空间可以合在一步完成,语法格式为:
数据类型[] 数组名 = new 数据类型[个数];
例如:
int[] scores = new int[5];
数组在内存空间中的表现:
3、元素赋值。
(1)我们可以在声明数组的同时,给数组里的元素赋值。有两种格式,
例如: int[] scores ={89,79,76};
int[] scores = new int[]{89,79,76};
这两种边声明边赋值的语法作用是相同的。在列出数据的同时,也已经确定了这个数组的长度,后续是无法再增加数组个数的,并且在第二种语法中,后面加了大括号和数值,大括号前面的中括号[]里就不能再写数组的长度了,否则就会报错。
(2)动态录入信息并赋值。这种方法用的比较多。可以通过循环的方式完成动态录入过程。
例如:
Scanner input = new Scanner(System.in);
for(int i=0;i<=30;i++){
scores[i] = input.nextInt();
}
4、处理数据。
定义完数组后,就可以使用数组中的数据进行运算了。
例如: a[0] = a[0] * 10;
或者通过增强型for循环(foreach)来遍历数组,完成一些特定功能。
for(int score : scores){
sum += score;
}
数组下标越界
我们定义一个数组,他的元素下标是从0开始,到数组长度-1为止,在运用数组元素的时候,如果出现元素下标超出了数组元素下标范围的情况,程序就会报错,出现ArrayIndexOutOfBoundsException一长串的英文,表示的是数组的下标越界了。
比如我们定义了一个长度为3的数组int[] scores = new int[3]
score[2] = 5;
score[3] = 8;
这里score[3]就是一个数组下标越界的情况,这个数组中只有score[0]、score[1]、score[2]三个元素。
在数组中插入一个元素
在已经定义好的一个数组中,我们要在其中插入一个新的数据,是通过将数组中插入点开始的每一个原有数据,分别向后或者说向右平移一个位置,然后再在插入点插入新的数据来完成的。这个平移的过程,是通过循环来实现的。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] scores= {
99,85,82,63,60,0};
System.out.println("请输入要插入的成绩:");
int score = scan.nextInt(