一.数组的特点:
1.数组是有序排列
2.数组是属于引用数据类型的变量,数组的元素,既可以是基本数据型也可以是引用数据类型
3.创建数组对象会在内存中开辟一整块连续的内存空间
4.数组的长度一旦确定就不能修改
二.一维数组的声明与初始化
1. int [] array; 声明数组
array=new int []{12,34,56,78};数组的静态初始化
2. 数组的动态初始化
int [] arr =new int [5];
3.动态数组的赋值
arr[0]=11;
arr[1]=12;
arr[2]=13;
arr[3]=14;
arr[4]=15;
注意:数组下标从0开始,数组里有5个数据元素,数组下标就到4。
4.数组的长度
System.out.println(arr.length);
执行上句即可得到数组长度
5.遍历数组
for(int i=0;i
System.out.println(arr[i]);
}
上面的语句就会不断循环的读出数组里的数据元素。
第一次读出arr[0]=11;
第二次读出arr[1]=12;
第三次读出arr[2]=13;
第四次读出arr[3]=14;
第五次读出arr[4]=15;
6.数组元素的默认初始化值
int [] a=new int[4];
for(int i=0;i
System.out.println(a[i]);
}
上述数组没有赋初始值,由于数组是整型的,所以它的数据元素的默认值是0;不同类型的数组的数据元素的默认初始值不同。
>数组元素是float型:默认值:0.0。
>数组元素是boolean型:默认值:false或true。
>数组元素是char型:默认值:0或u000,非’0’。
>数组元素是引用数据类型:默认值:null
例子:
String[] b=new String[5];
System.out.println(b[0]);
if(b[0]==null){
System.out.print(“true”);
}
输出是null,true。
三.一维数组的简单运用
1.输入学生的个数,输入相应的成绩,根据的学生的成绩输出相应的等级。
//1.使用Scanner,读入学生的个数
Scanner scan=new Scanner(System.in);
System.out.println("请输入学生个数:");
int num=scan.nextInt();
//2.创建数组,存储学生的成绩
int[] arr= new int[num];
System.out.println("请输入"+num+"学生成绩:");
for(int i=0;imax) {
max=arr[i];
}
}
//4.根据每个学生的成绩与最高分的差值,
//得到每个学生的等级,并输出等级和成绩
char level;
for(int i=0;i
输出结果:
2.一数组的反转
//反转数组中的元素
int[] arr = {10,80,90, 4, 5, 6};
//思路:首尾元素互换
for(int i=0;i
输出结果是:6,5,4,90,80,10,
四.二位数组的应用
1.二维数组的声明和初始化
a.静态初始化
int [][] arr=new int [][]{ {1,2,3},{4,5,6},{7,8,9}};
二位数组里面就是包含了多个一维数组
b.动态初始化
int [][] arr1=new int [3][2];
int [][] arr2=new int [3][];
c.注意一下声明的意思:
int [][] arr2=new int [3][];
arr2[1]=new int[4];
2.获取二维数组的长度
int [][] arr3=new int [][]{ {1,2,3},{4,5,},{7,8,9}};
System.out.println(arr3.length);---->值是3,参考上图
System.out.println(arr3[1].length);----->值是2
3.遍历二位数组
int [][] arr3=new int [][]{ {1,2,3},{4,5,},{7,8,9}};
for(int i=0;i<3;i++){
for(int j=0;j
System.out.print(arr3[i][j]+” “);
}
System.out.println();
}
4.二位数组的默认初始化值
int [][]arr=new int [3][4];
System.out.println(arr[0]);//值是地址
System.out.println(arr[0][0]);//值是0;
System.out.println(arr);
arr[0]:值是一维地址 [I@1f32e575,
arr[0][0]: 值是一维数组里元素的值,int型默认值 0
arr:值是二位数组的地址,[[I@279f2327
其他数据类型类似,只不过不同类型的数据元素的默认值不同,比如float默认值是0.0.
注意:
String [][] str=new String[4][2];
System.out.println(str[1]);
System.out.println(str[1][0]);
String [][] str2=new String[4][];
System.out.println(str2[1]);
System.out.println(str2[1][1]);
str[1]地址,str[1][0]=null,str2[1]=null;str2[1][1]会报错。由于str2只在堆里开了4个内存空间的一维数组,数组是引用类型,其值默认为null。而一维数组里的元素所在的内存空间还为开辟,无法指向,str2[1][1]会报错。把String声明成int型,str2[1]的默认值还是null。原因就是数组是引用类型。
难点理解:当堆里的东西没有栈指针指向时,随着生命周期的结束,栈里指针出栈释放,堆里也因没有栈指针指向也被释放,内存也就空出来了。
易错点:
int [] a=new int [5];
a[2]=5;
a=new int[4];
System.out.println(a[2]);
这时a[2]为空,new出来的东西放在堆里,a被在次new,即在堆里在重新开辟另一块空间,让a指向新的空间,原内存空间丢失。
五.二位数组的简单应用
1.求二维数组所有元素值的和。
int sum=0;
int[][]arr=new int[][] {{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i for(int j=0;j sum+=arr[i][j]; } } System.out.println(sum); 2.杨辉三角方法一:
int [][]arr=new int[5][];
for(int i=0;i



