二维数组
- 从定义形式尚看 int[] []
- 原来的一维数组的每个元素是一堆数组,就构成二维数组
int[][] arr ={{0,0,0,0,0,0},{0,0,1,0,0,0},{0,2,0,3,0,0},{0,0,0,0,0,0}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
关于二维数组的关键概念
-
二维数组的元素个数 arr.length
-
二维数组的每个元素是一堆数组 如果需要得到每个一堆数组的值 还需要再次遍历
-
如果我们要访问第(i+1)个一维数组的第(j+1)个值 arr[i] [j]
举例 访问3 arr[2] [3]
二维数组的使用
动态初始化
- 语法 类型[] [] 数组名 = new 类型 [大小] [大小]
- 比如 int a[] [] = new int[2] [3]
动态初始化2
- 先声明 类型 数组名[] []
- 再定义(开辟空间) 数组名 = new 类型[大小] [大小]
- 赋值(有默认值 比如 int类型的就是0)
// int[][] arr = new int[2][3];
int[][] arr;
arr=new int[2][3];
动态初始化-列数不确定
输出
1
2 2
3 3 3
int[][] arr =new int[3][]; //只new了一维数组 确立了一维数组个数
for (int i = 0; i < arr.length; i++) {
arr[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]+"\t");
}
System.out.println();
}
静态初始化
- int[][] arr ={{0,0,0,0,0,0},{0,0,1,0,0,0},{0,2,0,3,0,0},{0,0,0,0,0,0}};
二维数组的遍历
int arr[][] ={{4,6},{1,4,5,7},{-2}};
int result=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
result += arr[i][j];
}
}
System.out.println(result);
杨辉三角
int[][] yangHui=new int[12][];
for (int i = 0; i < yangHui.length; i++) {
yangHui[i]=new int[i+1];
for (int j = 0; j < yangHui[i].length; j++) {
if(j==0|| j== yangHui[i].length-1){
yangHui[i][j]=1;
}else{
yangHui[i][j]=yangHui[i-1][j]+yangHui[i-1][j-1];
}
}
}
for (int i = 0; i < yangHui.length; i++) {
for (int j = 0; j < yangHui[i].length; j++) {
System.out.print(yangHui[i][j]+"\t");
}
System.out.println();
}
二维数组使用细节和注意事项
-
一维数组的声明方式有
int[] x 或者 int x[]
-
二维数组的声明方式有
int[] [] y 或者 int[] y[] 或者 int y[] []
-
二维数组实际上是由多个一维数组组成的 它的各个一维数组的长度可以相同 也可以不同
int map[] []={{1,2},{3,4,5}}
由map[0]是一个含有两个元素的一维数组 map[1]是一个含有三个元素的一维数组构成 我们也称为列数不等的二维数组