JAVA学习第四天
一、今天学了什么
1.二维数组
必须注意动态初始化方式2的各种使用情况!
(1)声明和初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};//静态初始化,类似嵌套
int[][] arr4 = {1,2,3},{4,5},{6,7,8};//类型推断
String[][] arr2 = new String[3][2];//动态初始化方式1
String[][] arr3 = new String[3][];//动态初始化方式2
注意:在声明和初始化中,[]可以放在类型名后,也可以放在数组名后。
(2)元素调用
System.out.println(arr1[0][1]);//2 System.out.println(arr2[1][1]);//null System.out.println(arr3[1][0]);//报错,空指针异常。若要使用必须提前指定该数组的
(3)获取长度
System.out.println(arr1.length);//3
System.out.println(arr[0].length);//3
System.out.println(arr[1].length);//2
(4)遍历数组
for(int i = 0; i < arr1.length; i++) { for(int j =0; j < arr1[i].length; j++) { System.out.print(arr1[i][j] + " "); } }
//输出为:
/*1 2 3
4 5
6 7 8*/
(5)数组元素默认初始化值
int[][] arr5 = new int[4][3];
System.out.println(arr5[0]);//地址值(一维)
System.out.println(arr5[0][0]);//0
//int、String、float、double类型内层的都与int类型一致,与所对应一维数组默认初始化值相同
System.out.println(arr5);//也是地址值(二维)这两处地址不同
//但是必须要注意,使用第二种动态初始化方法时,输出将于上述不同
double[][] arr6 = new double[4][];
System.out.println(arr6[1]);//null。因为其每一个外层都应该是一个数组,数组属于引用类型,引用类型的默认初始值为null!
System.out.println(arr6[1][0]);//报错,空指针异常。
小总结:
针对动态初始化方式1:
外层:地址值;
内层:与一维数组初始化相同。
针对动态初始化方式2:
外层:null;
内层:不能调用,否则报错。
2.杨辉三角小练习:
打印一个10行的杨辉三角
代码如下:
int[][] num = new int[10][]; for(int i = 0; i < 10; i++) { num[i] = new int[i+1]; num[i][0] = 1; num[i][i] = 1; if(i > 1) { for(int j = 1; j < num[i].length-1; j++) { num[i][j] = num[i-1][j-1] + num[i-1][j]; } } } for(int i = 0; i < num.length; i++) { for(int j = 0; j < num[i].length; j++) { System.out.print(num[i][j]+" "); } System.out.println(); }