数组
文章目录
数组的概念
数组:数组是一种容器,可以同时存放多个数据值。
数组的特点:
- 数组是一种引用数据类型
- 数据当中的多个数据,类型必须统一
- 数组的长度在程序运行期间不可改变
数组的定义格式
数组的初始化:在内存中创建一个数组,并且向其中赋予一些默认值。
两种常见的初始化方式
- 动态初始化(指定长度)
- 静态初始化(指定内容)
动态初始化数组的格式
数据类型 [ ] 数组名称 = new 数据类型 [数组长度];
解析含义:
- 左侧数据类型:也就是数组当中保存的数据,全都是统一的类型。
- 左侧中括号:代表数组。
- 左侧数组名称:给数组取一个名字。
- 右侧的new:代表创建数组的动作。
- 右侧的数据类型:必须和左边的数据类型保持一致。
- 右侧的中括号长度:数组当中,可以保存多少数据。
//动态初始化
int [] arrayA = new int [300];
double [] arrayB = new double [100];
String [] arrayC = new String [10];
静态初始化数组的格式
数据类型 [ ] 数组名称 = new 数据类型[ ] {元素1,元素2,…};
//静态初始化
int [] arrayA = new int [] { 5, 15, 25 };
String [] arrayB = new String [] { "Hello" , "World" };
注意事项:
虽然静态初始化没有直接长度,但是根据大括号里面的元素具体内容,也可以具体推算出来长度。
静态省略格式:
数据类型 [ ] 数组名称 = {元素1,元素2,…}
int [] arrayA = { 15, 20, 25 };
注意事项
- 静态初始化没有直接指定长度,但是仍然会自动。
- 静态初始化标准格式和动态初始化格式可以拆分为两个步骤。
- 静态初始化一旦使用省略格式,就不能拆分成两个步骤。
访问数组元素进行获取
直接打印数组名称,得到的是对应的内存地址哈希值。
访问数组的格式:
数组名称 [索引值]
索引值:int一个数组,代表数组当中元素的编号。(索引是从0开始,一直到 数组长度-1 为止。
public class Array {
public static void main(String[] args) {
int [] arrayA = new int [] {5,15,25};
System.out.println(arrayA [2]); //25
int num = arrayA [2];
System.out.println(num); //25
}
}
访问数组元素进行赋值
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
- 如果是整数类型,默认为0。
- 如果是浮点类型,默认为0.0。
- 如果为字符类型,默认为\u0000。
- 如果为布尔类型,默认为false。
- 如果为引用类型,默认为NULL。
public class Array {
public static void main(String[] args) {
int [] arrayA = new int [3];
arrayA [1] = 666;
System.out.println(arrayA [1]);
}
}
常见问题
数组索引越界异常
如果访问数组元素的时候,索引编号不存在,那么将发生
数组索引越界异常:ArrayIndexOutOfBoundsException
空指针异常
数组必须进行new初始化才能使用其中的元素。如果只是赋值了一个null,没有进行new创建,将会发生:
空指针异常 : NullPointerException
获取数组长度
格式:数组名称.length
将会得到一个int数字,代表数组长度。
数组一旦创建,程序运行期间,长度不可改变。
public class Array {
public static void main(String[] args) {
int [] arrayA = {5,56,18,123,456,59,48,20,12,80,60,48,95,35};
int len = arrayA.length;
System.out.println("数组的长度是:"+len);
}
}
数组的遍历输出
public class Array {
public static void main(String[] args) {
int [] arrayA = {5,56,18,123,456,59,48,20,12,80,60,48,95,35};
for (int i = 0; i < arrayA.length; i++) {
System.out.println(arrayA[i]);
}
}
}
求出数组中的最值
public class Array {
public static void main(String[] args) {
int [] arrayA = {5,15,25,30,10000,66};
int max = arrayA[0];
for (int i = 1; i < arrayA.length; i++) {
if (arrayA[i]>max){
max = arrayA[i];
}
}
System.out.println("最大值为:"+ max);
}
}
数组元素的反转
//数组元素反转,其实就是对称位置的元素交换。
//遍历需要一个索引,而反转需要两个索引。
int min=0;
int max = array.length - 1;
//利用第三个变量进行交换两个变量的值。
int temp = a;
a=b;
b= temp;
//停止交换的条件
min == max;
min > max;
//交换的条件
min<max;
public class Array {
public static void main(String[] args) {
int[] arrayA = {5, 15, 25, 30, 10000,66};
for (int i = 0; i < arrayA.length; i++) {
System.out.println(arrayA[i]);
}
System.out.println("====================================");
for (int min = 0, max = arrayA.length - 1; min<max; min++,max--){
int temp;
temp = arrayA[max];
arrayA[max] = arrayA[min];
arrayA[min] = temp;
}
for (int i = 0; i < arrayA.length; i++) {
System.out.println(arrayA[i]);
}
}
}
数组作为方法的参数
数组可以作为方法的参数。当调用方法的时候,向方法小括号进行传参,传递进去的其实是数组的地址值。
public class Array {
public static void main(String[] args) {
int[] arrayA = {5, 15, 25, 30, 10000,66};
printArry(arrayA);
}
public static void printArry(int [] array){
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
数组作为方法的返回值
public class Array {
public static void main(String[] args) {
int [] result = returnArray(15,20,25);
System.out.println("总和:"+result[0]);
System.out.println("平均数:"+result[1]);
}
public static int[] returnArray(int a,int b,int c){
int sum = a+b+c;
int avg = sum/3;
int [] array={sum,avg};
return array;
}
}
]);
System.out.println("平均数:"+result[1]);
}
public static int[] returnArray(int a,int b,int c){
int sum = a+b+c;
int avg = sum/3;
int [] array={sum,avg};
return array;
}
}