如果我们需要定义很多相同类型的变量的时候,一个一个去定义?那也太累了!
就好比我们打boss时一直用普通攻击刮痧。这时,我们就要学会一个较高伤害的技能—数组(技能描述:集所有普通攻击为一体,一次性使用)
所以,数组就是存放多个相同类型变量的有序集合
一维数组
声明一维数组:
数据类型 数组名 [ ] 或 数据类型[ ] 数组名
例如:
int arr[ ]; int[ ] arr; float a[ ]; //是不是感觉少了点东西??没错,就是中括号里的东西——元素个数(数组长度),下面我们会逐步了解。
初始化:
动态初始化:先声明数组并且为数组元素分配空间,之后再进行赋值
int[] arr = new int[3]; //声明一个能存放3个int类型数据的数组
arr[0] = 2; //第一个元素为2
arr[1] = 4; //第二个元素为4
动态初始化时,数组默认初始化为0,当我们用new给数组创建内存后,它就已经隐式初始化了(看不见摸不着),我们未给元素赋值时,它的值为0。若元素为对象,那么默认类型是null。
int[] arr = new int[3];
System.out.println(arr[1]); //此时arr[1]的值为0
静态初始化:声明数组,分配空间的同时赋值
int[] arr = new int[ ] {1,2,3}; //声明一个存放了1,2,3的数组
数组声明了,如何引用呢?—— 数组名 [ 元素下标 ]
new创建内存之后,才能引用数组中的元素
元素下标可以时整型常量或整型表达式:如a[ 3 ]、arr[ x ]、array[ 2*i ]
简单理解为数组中第几个元素
由于元素下标是从0开始的,所以第一个元素为a[0],第n个元素为[ n-1 ]
指明数组长度(数组名.length)
int arr[ ] = new int[ ] {1,2,3,4};
System.out.println(arr.length); //arr.length用于指明数组arr的长度(元素个数)
多维数组
二维数组:一维数组的每个元素都是数组,那么该数组就是二维数组。(“数组的数组”(一维数组技能升级))
声明二维数组(与一维数组类似):
数据类型 数组名 [ ] [ ] 或 数据类型 [ ] [ ] 数组名 或
数据类型 [ ] 数组名 [ ]
int arr[ ][ ] = new int[m][n]; //第一维长度为m,第二维=第一维每个元素的长度是n
初始化:与一维数组类似分为动态初始化和静态初始化
int arr[ ][ ] = new int[ 1 ][ ]; 只定义第一维,不定义第二维也可以
注:int[ ] a,b[ ]; a是一维数组,b是二维数组
int arr[ ][ ] =new int[ ][ ]{
{1,3,5}, //第0个元素
{2,4,6} //第1个元素
};
//arr[0][0] = 1 arr[0][1] = 3 arr[0][2] = 5
//arr[1][0] = 2 arr[1][1] = 4 arr[1][2] = 6
求数组元素的最大值、最小值、总和、平均数
//最大值
int[] arr = new int[] { 3, 2, 5, 1, 6, 4 };
int max = arr[0]; //假设第一个元素最大
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
//最小值同理
int[] arr = new int[] { 3, 2, 5, 1, 6, 4 };
int min = arr[0]; //假设第一个元素最小
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
//求和、平均数
int[] arr = new int[] { 3, 2, 5, 1, 6, 4 };
int sum = 0;
for(int i = 0; i <arr.length; i++) {
sum += arr[i]; //总和
}
int average = sum / arr.length; //平均数
System.out.println("总和" + sum);
System.out.println("平均数" + average);
数组的复制
int[] arr = new int[] { 1, 2, 3, 4, 5 };
int[] copy = new int[arr.length]; //数组 copy与数组 arr长度相同,初始值默认为0
for (int i = 0; i < arr.length; i++) {
copy[i] = arr[i]; //遍历数组,将 arr中每一个元素传给 copy
}
//这里需要自己运行,观察下边的输出有什么不同
System.out.println(arr);
System.out.println(copy);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copy));
关于数组输出的问题
观察上边数组复制代码中的输出语句,我们发现通过 System.out.println(arr); 输出的是数组的首地址,而 System.out.println(Arrays.toString(arr)); 可以输出各个元素,其中我们用Arrays.toString( )的方法,将数组以字符串形式输出
数组的反转(循序倒置)
未完待续= =