导语:数组是Java基础语法中重要的组成部分。
数组的基础知识主要从以下几个方面进行讲解。
1、数组的声明和初始化
2、如何调用数组指定位置的元素
3、如何获取数组的长度
4、如何遍历数组
5、数组元素的默认初始化值
6、数组的内存解析
一、一维数组的使用
1、一维数组的声明和初始化
1.1静态初始化:数组初始化和数组元素的赋值操作同时进行
int[] ids;
ids = new int[]{1001,1002,1003,1004};
1.2、动态初始化:数组初始化和数组元素的赋值操作分开进行
int[] arr = new int[3];
String[] names = new String[5];
错误示范:编译错误
//错误示范
//int[] arr1 = new int[];
//int[] arr2 = new int[3]{1001,1002,1003};
//int[5] arr3 = new int[5];
2、如何调用数组指定位置的元素:
说明:①通过角标(索引)来调用指定位置的数组元素
②数组元素的角标是从0开始的,到数组长度-1为止。
names[0] = "王力宏";
names[1] = "雷军";
names[2] = "余承东";
names[3] = "罗永浩";
names[4] = "迪丽热巴";
// names[5] = "古力娜扎"; java.lang.ArrayIndexOutOfBoundsException: 5
System.out.println(names[3].charAt(0));
3、如何获取数组的长度
说明:①调用数组的length属性。
②数组初始化完成后,其长度就被确定,无法改变。
System.out.println(names.length);
System.out.println(ids.length);
4、如何遍历数组
说明:使用循环结构。
/* System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
System.out.println(names[3]);
System.out.println(names[4]);
*/
for(int i=0;i<names.length;i++){
System.out.println(names[i]);
}
5、数组元素的默认初始化值
1、基本数据类型:
>数组元素是整型:0
>数组元素是浮点型:0.0
>数组元素是字符型:0或者写成'\u0000'
>数组元素是布尔型:false
2、引用数据类型:
>数组元素是引用数据类型:null
int arr1[] = new int[3];
for(int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
System.out.println("********");
double arr2[] = new double[3];
for(int i=0;i<arr1.length;i++){
System.out.println(arr2[i]);
}
System.out.println("********");
char arr3[] = new char[3];
for(int i=0;i<arr1.length;i++){
System.out.println("----"+arr3[i]+"****");
}
if(arr3[0] == 0){
System.out.println("hello");
}
System.out.println("********");
boolean arr4[] = new boolean[3];
for(int i=0;i<arr1.length;i++){
System.out.println(arr4[i]);
}
System.out.println("********");
String arr5[] = new String[3];
for(int i=0;i<arr1.length;i++){
System.out.println(arr5[i]);
}
if(arr5[0] == null){
System.out.println("你好");
}
System.out.println("********");
6、数组的内存解析
1、内存的建议结构(尚硅谷康师傅作图):
2、一维数组的内存解析:
7、经典例题
1、从键盘读入学生成绩,找出最高分, 并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
Scanner scan = new Scanner(System.in);
System.out.print("请输入学生人数:");
int count = scan.nextInt();
int[] arr = new int[count];
int max = 0;
char grade = ' ';
System.out.println("请输入" + count + "个成绩");
for(int i=0;i<arr.length;i++){
int score = scan.nextInt();
arr[i] = score;
if(arr[i]>max){
max = arr[i];
}
}
System.out.println("最高分是:" + max);
for(int i = 0;i<arr.length;i++){
switch((max-arr[i])/10){//也可以使用if-else结构,要注意根据范围确定哪个语句在上
case 0:
grade = 'A';
break;
case 1:
grade = 'B';
break;
case 2:
grade = 'C';
break;
default :
grade = 'D';
break;
}
System.out.println("student " + i +"score is"+arr[i] + "grade is "+ grade);
}
运行结果:
二、二维数组的使用
如何理解二维数组?
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
1、二维数组的声明和初始化
1.1、二维数组的静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6}};
1.2、二维数组的动态初始化
String[][] arr2 = new String[3][2];
String[][] arr3 = new String[3][];
//也是正确的写法
int[] arr4[] = new int[][]{{1,2,3},{4,5,7,8,9},{6}};
int[] arr5[] = {{1,2,3},{4,5},{6}};
2、如何调用数组指定位置的元素
说明:根据元素所在数组的角标进行调用。
System.out.println(arr1[1][1]);//5
System.out.println(arr2[2][1]);//null
arr3[0] = new String[2];
arr3[1] = new String[]{"张强","王伟","鱼尾"};
System.out.println(arr3[0][1]);//null
System.out.println(arr3[1][0]);//张强
3、如何获取数组的长度
调用数组的length属性。
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//5
4、如何遍历数组
使用嵌套循环结构遍历二维数组,依次类推如果要遍历三维数组,就使用三层嵌套循环,遍历n维数组就使用n层嵌套循环。
for(int i=0;i<arr4.length;i++){
for(int j=0;j<arr4[i].length;j++){
System.out.print(arr4[i][j]+" ");
}
System.out.println();
}
5、数组元素的默认初始化值
1、为了我们更好的理解二维数组的初始化默认值,我们规定:
1、二维数组分为外层数组的元素和内层数组的元素
2、二维数组 int[][] arr = new int[3][2]
3、外层数组:arr[0],arr[1],arr[2]
4、内层数组:arr[0][0],arr[0][1],arr[1][0],arr[1][1],arr[2][0],arr[2][1]
对于初始化方式一:int[][] arr = new int[3][2];
外层数组的默认初始化值:地址值。
内层数组的默认初始化值:与一维数组相同。
对于初始化方式二:int[][] arr = new int[3][];
外层数组默认初始化值:null。
内层数组默认初始化值:不存在,不可调用,调用编译器会报错。
int[][] arr = new int[4][3];
System.out.println(arr[0]);//[I@15db9742 地址值
System.out.println(arr[0][0]);//0
System.out.println(arr);//[[I@6d06d69c 地址值
System.out.println("********");
float[][] arr1 = new float[4][2];
System.out.println(arr1[1]);//[F@7852e922 地址值
System.out.println(arr1[2][1]);//0.0
System.out.println("********");
String[][] arr2 = new String[4][3];
System.out.println(arr2[2]);//[Ljava.lang.String;@4e25154f 地址值
System.out.println(arr2[1][1]);//null
System.out.println("********");
double[][] arr3 = new double[4][];
System.out.println(arr3[2]);//null
// System.out.println(arr3[3][0]);//报错
System.out.println("********");
6、数组的内存解析
7、经典例题
1、打印一个10行的杨辉三角。
//1.声明初始化一个二维数组
int[][] yangHui = new int[10][];
//2.给二维数组赋值
for(int i=0;i<yangHui.length;i++){
yangHui[i] = new int[i+1];
//2.1给首末元素赋值
yangHui[i][0] = yangHui[i][i] = 1;
//2.2给非首末元素赋值
//if(i>1){
for(int j=1;j<yangHui[i].length-1;j++){
yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
}
// }
}
//3.遍历二维数组
for(int i=0;i<yangHui.length;i++){
for(int j=0;j<yangHui[i].length;j++){
System.out.print(yangHui[i][j]+" ");
}
System.out.println();
}
运行结果: