1. 概述
- 数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理。
- Java中使用关键字 new 来创建数组
- 数组的常见概念 :
数组名
下标(或索引)
元素
数组的长度 - 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基础数据类型和引用数据类型。
- 数组的长度一旦确定,就不能修改。
- 可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组的分类:
按照维度: 一维数组、二维数组、多维数组
按照元素的数据类型:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
2. 一维数组
-
声明: type[] var( Java的常用形式) 、 type var[]
注意:Java语言中声明数组时不能指定其长度(数组中元素的数),例如: int arr[ 5 ]; // 非法
-
初始化:
动态初始化:int[] arr = new int[10]
arr[0] = 值
静态初始化:int[] arr = { 元素 元素和元素之间使用逗号隔开}
int[] arr = new int[ ]{ 元素 }; -
对于数组元素的引用:
通过角标引用
使用时 不能超出数组的下标的范围
下标范围:0 ---- 数组长度 - 1 -
数组存在的默认值:
整型(byte、short、int、long)的默认值:0
浮点型(float、double):0.0
字符型:空格
boolean:false
练习:
- 从键盘读入学生成绩,找出最高分, 并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
提示:先读入学生人数,根据人数创建int数组, 存放学生成绩。
public static void main(String[] args){
System.out.print("请输入学生人数:");
Scanner sc = new Scanner(System.in);
int stuNum = sc.nextInt();
int[] scores = initArr(stuNum); // 创建一个保存成绩的数组
// 记录成绩
recordScore(scores);
// 获取最高分
int maxScore = getMax(scores);
// 判定等级
grade(scores,maxScore);
}
// 初始化一个数组
public static int[] initArr(int length){
return new int[length];
}
// 录入学生成绩
public static void recordScore(int[] arr){
Scanner sc = new Scanner(System.in);
System.out.println("请输入"+ arr.length +"个学生成绩");
for (int i = 0; i < arr.length ; i++) {
arr[i] = sc.nextInt();
}
}
// 获取最高分
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 1;i < arr.length;i++){
if (max < arr[i]){
max = arr[i];
}
}
System.out.println("最高分是:"+ max);
return max;
}
// 判定等级
public static void grade(int[] arr,int max){
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= max - 10){
System.out.println("学生"+ i +"的成绩为:"+ arr[i] +" ,等级为A");
}else if (arr[i] >= max - 20){
System.out.println("学生"+ i +"的成绩为:"+ arr[i] +" ,等级为B");
}else if (arr[i] >= max - 30){
System.out.println("学生"+ i +"的成绩为:"+ arr[i] +" ,等级为C");
}else {
System.out.println("学生"+ i +"的成绩为:"+ arr[i] +" ,等级为D");
}
}
}
结果截图:
- 数组元素的遍历:
普通for:使用数组的属性 arr.length 来获取数组的长度
for(int i = 开始索引; 索引的范围; 每次的步长){
可以对数组中每一个元素进行精确操作;
}
格式:
for(int i = 0 ; i < arr1.length;i++) {
System.out.println(arr1[i]);
}
增强 for / for … each:
for(遍历对象的类型 每次遍历得到的对象的一个
临时保存变量 :要遍历的对象(数组名称)){
对数组所有元素的一个运算;
}
格式:
for(int i : arr1) {// 1 是遍历对象的类型 2 每次遍历得到的数据保存的变量 3 遍历对象
System.out.println(i);
}
- 两者之间的区别:
运算中,普通for 可以精确控制操作对象
增强for 必须是整个数组的所有元素 无法精确控制每个元素
3. 二维数组
二维数组[ ] [ ] :数组中的数组
动态初始化
int[ ][ ] arr = new int[5][5];
int[][] arr = new int[5][ ];
静态初始化
int[ ][ ] arr = new int[ ][ ]{{1,2,3},{4,5,6},{7,8,9}, {3,6,9}};
特殊形式
//数组定义的特殊形式
int[ ] x,y[ ]; // x是一维数组,y是二维数组
x = new int[3];
y = new int[5][ ];
提示:
一维数组:int[ ] x 或者int x[ ]
二维数组:int[ ][ ] y 或者 int[ ] y[ ] 或者 int y[ ][ ]
练习:
- 使用二维数组,打印一个 10 行的杨辉三角
public static void main(String[] args) {
int[][] arr = new int[10][10];
arr[0][0] = 1;
for (int i = 1;i<10;i++){
arr[i][0] = 1;
arr[i][i] = 1;
for (int j = 1;j < i;j++){
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
//遍历数组
for (int i = 0;i<10;i++){
for (int j = 0;j<=i;j++){
System.out.print(arr[i][j] +"\t");
}
System.out.println();
}
}
结果截图: