Java基础 3.28
1.二维数组
- 从形式上定义看 int[][]
- 原来的一维数组的每个元素是一维数组,就构成了二维数组
int arr[][] = { {0, 0, 0 ,0},{0, 1, 1, 1},{0, 0, 0, 0},{0, 1, 1, 1} };
关于二维数组的关键概念
- 二维数组的元素个数为arr.length
- 二维数组的每个元素是一堆数组,所有如果需要得到每个一维数组的值还需要再次遍历
- 如果我们要访问第(i+1)个一维数组的第(j+1)个值 arr[i][j]
public class TwoDimens {public static void main(String[] args) {int arr[][] = { {0, 0, 0 ,0},{0, 1, 1, 1},{0, 0, 0, 0},{0, 1, 1, 1} };//输出二维图形for (int i = 0; i < arr.length; i++) {//遍历二维数组的每个元素for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");//输出一堆数组}System.out.println();//换行}}
}
二维数组的使用
二维数组的存储机制如图所示
使用方式1:动态初始化
语法:类型[][] 数组名 = new 类型[大小][大小] int a[][] = new int[2][3]
public class TwoDimens02 {public static void main(String[] args) {int arr[][] = new int[2][3];arr[1][2] = 8;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println(); }}
}
使用方式2:动态初始化
- 先声明:类型 数组名[][]
- 再定义(开辟空间)数组名 = new 类型[大小][大小]
- 赋值(有默认值,比如int类型的就是0)
int arr[][];
arr = new int[2][3];
使用方式3:动态初始化-列数不确定
public class TwoDimens02 {public static void main(String[] args) {int arr[][] = new int[3][];//创建二维数组,但是知识确定一维数组的个数for (int i = 0; i < arr.length; i++) {//遍历arr每个一维数组//给每个一维数组开空间 new//如果没有给一维数组new,那么arr[i]就是nullarr[i] = new int[i + 1];//遍历一维数组,并给一维数组的每个元素赋值for (int j = 0; j < arr[i].length; j++) {arr[i][j] = i + 1;}}//输出以上形成的二维数组for (int i = 0;i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();//换行}}
}
使用方式4:静态初始化
- 定义 类型 数组名[][] = {{}, {}, {}} int arr[][] = {{1, 2, 3}, {2, 3, 4}, {6}};
- 直接在大括号内赋值即可,固定访问
注意:一旦定义了某个二维数组,二维数组中便不可再出现基本数据类型或其他类型,只能是一维数组
错误示范
int arr[][] = {{1, 2, 3}, {2, 3, 5}, 10};
直接报错
二维数组练习
public class TwoDimens03 {public static void main(String[] args) {//遍历该数组并得到该数组的和int arr[][] = {{4 ,6}, {1, 4, 5, 7}, {-2}};int sum = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {sum += arr[i][j];System.out.print(arr[i][j] + " ");}System.out.println();}System.out.print("sum = " + sum);}
}
用二维数组创建杨辉三角
ublic class TwoDimens04 {public static void main(String[] args) {//杨辉三角的创建/*1 2 11 3 3 11 4 6 4 11 5 10 10 5 1规律1.第一行有1个元素,第n行有n个元素2.每一行的第一个元素和最后一个元素都是13.从第三行开始,对于非第一个元素和最后一个的元素的值 arr[i][j]arr[i][j] = arr[i-1][j] + arr[i-1][j-1]*/int arr[][] = new int[10][];for (int i = 0; i < arr.length; i++) {//遍历杨辉的每个元素//给每个一维数组开空间arr[i] = new int[i + 1];//给每个一维数组赋值for (int j = 0; j < arr[i].length; j++) {//每行的第一个元素和最后一个元素都是1if (j == 0 || j == arr[i].length - 1) {arr[i][j] = 1;} else {//中间的元素arr[i][j] = arr[i-1][j] + arr[i-1][j-1];}}}//输出杨辉三角for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();}}
}
二维数组的使用细节和注意事项
- 一维数组的声明方式有:int[] x 或 int x[]
- 二维数组的声明方式有:int[][] y 或 int[] y[] 或 int y[][]
- 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同 例如:int map [][] = {{1, 2}, {3, 4, 5}} 我们称为列数不等的二维数组