目录
一、数组的概念
数组是一个变量,一个装数据的容器,存储多个相同类型的数据
由数组名、元素类型、元素、下标组成(从0开始)
二、一维数组
(1)一维数组的创建
1)第一步:声明数组: 数据类型[] 数组名; 或者 数据类型 数组名[];
第二步:分配空间,告诉你声明的数组里可以存储多少个数据,数组名 = new 数据类型[数组元素个数];
第三步:给数组赋值,将数据存储到数组中,数组名[下标] = 数据;
2)声明数组、分配空间也可以合并写
数据类型[] 数组名 = new 数据类型[数组长度]; 或者
数据类型 数组名[] = new 数据类型[数组长度];
然后进行赋值
3)也可以在声明数组、分配空间时就进行赋值
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,....,数据n};
注意:= 后面的[]里不要写数组长度。
一维数组的声明、分配空间、赋值合并的简写方式
数据类型[] 数组名 = {数据1,数据2,...,数据n};
(2)遍历一维数组
1)按照元素在数组中的位置顺序输出
for(int i = 0;i< nums.length;i++){
System.out.print(nums[i]+" ");
}
2)使用增强for循环来遍历
for (数据类型 变量名: 数组名){
System.out.println(变量名);
}
执行规律:按照数组中元素的顺序依次将元素取出来存入变量中,操作变量a相当于操作数组中的元素
应用:如何在数组中插入一个元素
1)新建一个比原来数组长度大于1的数组
2)将原来数组里面的元素按照顺序存储到新的数组中
3)使用Scanner获取要增加的学员成绩
4)通过循环比较,获取插入元素要插入元素的下标
5)从插入位置开始及之后的元素依次往后移动一位(从后向前移动)
6)移动元素后,将插入元素存储到要插入的位置
int grade1[] = {99,85,82,63,60};
// 1)新建一个比原来数组长度大于1的数组
int grade[] = new int[grade1.length+1];
// 2)将原来数组里面的元素按照顺序存储到新的数组中
for (int i = 0;i<grade1.length;i++){
grade[i] = grade1[i];
}
// 3)使用Scanner获取要增加的元素
Scanner sc = new Scanner(System.in);
System.out.print("请输入新增的元素:");
int score = sc.nextInt();
int index = grade.length-1;
// 4)通过循环比较,获取插入元素要插入元素的下标
for (int i = 0; i < grade.length; i++) {
if (score > grade[i]) {
index = i;
break;
}
}
// 5)从插入位置开始及之后的元素依次往后移动一位(从后向前移动)
for (int j = grade.length - 1; j > index; j--) {
grade[j] = grade[j - 1];
}
// 6)移动元素后,将插入元素存储到要插入的位置
grade[index] = score;
System.out.println("替换元素的下标是:" + index);
System.out.println("替换后的元素排序是:");
// 循环遍历新的数组
for (int k = 0; k < grade.length; k++) {
System.out.print(grade[k] + " ");
}
(3)Arrays工具类的简单使用
1)Arrays类的sort()方法: 对数组进行升序排列
2)Arrays.equals(数组名1, 数组名2)比较array1和array2两个数组是否相等
3)Arrays.toString(数组名)将一个数组array转换成一个字符串
4)Arrays.fill(nums,val)把数组array所有元素都赋值为val
5)Arrays.copyOf(数组名, newlength)把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
6)Arrays.binarySearch(数组名, 数组元素)查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)
三、二维数组
二维数组:即数组的嵌套,数组里面的元素又是一个数组
(1)二维数组的创建
1)声明二维数组: 数据类型[][] 数组名; 或者 数据类型 数组名[][];
分配空间(告诉你这个数组里可以存储多少个元素): 数组名 = new 数据类型[数组长度][数组长度]; 或者 数组名 = new 数据类型[数组长度][];
注意:二维数组在分配空间的时候,第一个数组长度必须要写,告诉你这个二维数组里有多少个元素,
第二数组长度可以写,可以不写,不过写了,表示这个二维数组里的里面的元素(一维数组)的长度,
如果没有写,这个二维数组里面的元素(一维数组)长度可以不一样
赋值:数组名[下标][下标] = 数据;
2)声明数组、分配空间也可以合并写
数据类型[][] 数组名=new 数据类型[数组长度][数组长度]; 或者 数据类型[][] 数组名=new 数据类型[数组长度][];
3)二维数组的声明、分配空间、赋值合并写
数据类型[][] 数组名 = new 数据类型[][]{{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}}; 注意:new后面的两个[][]里都不能写数组长度
二维数组的声明、分配空间、赋值合并的简写方式
数据类型[][] 数组名 = {{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}};
(2)遍历二维数组
int nums[][] = {{1,2,3},{4,5},{6,7,8}};
for(int i =0;i<nums.length;i++){
// nums[i]又是一个一维数组,对这个一维数组nums[i]再次进行循环
for(int j =0;j<nums[i].length;j++){
System.out.println(nums[i][j]);
}
}
应用:已知有3个班级各5名学员,请使用二维数组计算各个班级的总成绩
double nums[][] = new double[3][5];
Scanner sc = new Scanner(System.in);
for(int i = 0;i<nums.length;i++){
System.out.println("---------第"+(i+1)+"个班---------");
for(int j = 0;j<nums[i].length;j++){
System.out.print("请输入第"+(j+1)+"个学生的成绩:");
nums[i][j] = sc.nextInt();
}
System.out.println();
}
System.out.println("---------成绩统计---------");
for(int i = 0;i<nums.length;i++){
double sum = 0.0;
for(int j = 0;j<nums[i].length;j++){
sum += nums[i][j];
}
System.out.print((i+1)+"班总成绩:"+sum);
System.out.println();
}