1. 为什么需要数组
- 一个养鸡场有 6 只鸡,它们的体重分别是
3kg,5kg,1kg,3.4kg,2kg,50kg
。请问这六只鸡的总体重是多少?平均体重是多少? 请你编一个程序。 Array01.java - 思路分析:
定义 6 个变量 , 加起来 总体重, 求出平均体重.引出 -> 数组
1.1 数组介绍
- 数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。
即:数(数据)组(一组)就是一组数据
1.2 数组快速入门
Array01.java
- 比如,我们可以用数组来解决上一个问题。
- 思路分析:
- 我们可以通过
hens[下标]
来访问数组的元素,下标是从0
开始编号的比如第一个元素就是hens[0]
,第2个元素就是hens[1]
, 依次类推 - 通过
for
就可以循环的访问 数组的元素/值
- 使用一个变量
totalWeight
将各个元素累积
double[] hens = {3, 5, 1, 3.4, 2, 50};
double totalWeight = 0;
for (int i = 0; i < 6; i++) {
System.out.println("第" + (i+1) + "个元素的值=" + hens[i]);
totalWeight += hens[i];
}
System.out.println("总体重=" + totalWeight + "平均体重=" + (totalWeight / hens.length));
- 因为数组是从
0
开始的下标,所以for
循环中i = 0
时表示数组下标有0,1,2,3,4,5
共6
个元素可以遍历(因为数组中有6
个元素),所以写成 i < 5(等价于数组中有6
个元素)也可以写为i <= 5
,为了跟清晰明了,一般写为i < 6
- 如果需要增加 鸡的个数时,只要改动数组就行,其他变量都不需要改动。
2. 数组的使用
- 步骤
- 创建一个 double 数组,大小 5
(1) 第一种动态分配方式
double scores[] = new double[5];
(2) 第2种动态分配方式, 先声明数组,再 new
分配空间
double scores[] ; //声明数组, 这时的 scores 是 null
scores = new double[5]; // 分配内存空间,可以存放数据
- 循环输入
scores.length 表示数组的大小/长度
double[] scores = new double[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "个元素的值");
scores[i] = sc.nextDouble();
}
System.out.println("==数组元素的输出情况:==");
for (int i = 0; i < 5; i++) {
System.out.println("请输入第" + (i + 1) + "个元素的值" + scores[i]);
}
2.1 动态初始化数组
- 先声明数组
语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
- 创建数组
语法:数组名=new 数据类型[大小];
a=new int[10];
- 案例演示
2.2 数组静态初始化
3. 数组的使用注意事项和细节
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
int[] arr1 = {1, 2, 3, 60,"hello"};//String ->int 类型不匹配
double[] arr2 = {1.1, 2.2, 3.3, 60.6, 100};//int ->doubl 可以通过,满足自动类型转换
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
String[] arr3 = {"北京","jack","milan}
- 数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,
char \u0000,boolean false,String null
- 举例:
short[] arr4 = new short[3];
System.out.println("==数组arr4==");
for (int i = 0; i < arr4.length; i++) {
System.out.println(arr4[i]);
}
-
使用数组的步骤: 1. 声明数组并开辟空间 2. 给数组各个元素赋值 3. 使用数组
-
数组的下标是从 0 开始的。
-
数组下标必须在指定范围内使用,否则报:下标越界异常,比如
int [] arr=new int[5];
则有效下标为0-4
,即数组的的下标最小为0
,最大为数组长度-1
(5-1=4) -
数组属引用类型,数组型数据是对象(
object
)
4. 数组的应用案例
- 创建一个 char 类型的 26 个元素的数组,分别 放置
'A'-'Z'
。使用 for 循环访问所有元素并打印出来。提示:char 类型数据运算'A'+2 -> 'C'
ArrayExercise01.java
- 思路分析
1. 定义一个 数组char[] chars = new char[26]
2. 因为'A' + 1 = 'B'
类推,所以使用for来赋值
3. 使用for循环访问所有元素
char[] chars = new char[26];
for( int i = 0; i < chars.length; i++) {//循环26次
//chars 是 char[]
//chars[i] 是 char
chars[i] = (char)('A' + i); //'A' + i 是int , 需要强制转换
}
//循环输出
System.out.println("===chars数组===");
for( int i = 0; i < chars.length; i++) {//循环26次
System.out.print(chars[i] + " ");
}
- 请求出一个数组
int[]
的最大值 {4,-1,9, 10,23}
,并得到对应的下标。 ArrayExercise02.java
- 思路分析
- 定义一个int数组
int[] arr = {4,-1,9, 10,23};
- 假定
max = arr[0]
是最大值 ,maxIndex=0;
- 从下标
1
开始遍历arr
, 如果max < 当前元素
,说明max
不是真正的最大值, 我们就
max=当前元素;
maxIndex=当前元素下标
- 当我们遍历这个数组
arr
后 ,max
就是真正的最大值,maxIndex
最大值对应的下标
int[] arr = {4,-1,9,10,23};
int max = arr[0];//假定第一个元素就是最大值
int maxIndex = 0; //
for(int i = 1; i < arr.length; i++) {//从下标 1 开始遍历arr
if(max < arr[i]) {//如果max < 当前元素
max = arr[i]; //把 max 设置成 当前元素
maxIndex = i;
}
}
//当我们遍历这个数组arr后 , max就是真正的最大值,maxIndex最大值下标
System.out.println("max=" + max + " " + "maxIndex=" + maxIndex);