目录
需求引出
二维数组,和一维数组相似,本质上二维数组是由一维数组构成的
二维数组的使用方式
1.动态初始化(第一种方式)
语法:类型[]]数组名=new 类型大小
比如:int a =new int2
2.动态初始化(第二种方式)
先声明:类型 数组名[][;
再定义(开辟空间)数组名 =new类型大小
赋值(有默认值,比如int类型的就是0)
3.静态初始化
1.定义 类型 数组名三((值1,值2..),(值1,值2..),(值1,值2..》
2.使用即可固定方式访问]
比如: int[][] arr ={{1,1,1},{8,8,9}{100}};
解读
1.定义了一个二维数组 arr[][]
2.arr有三个元素(每个元素都是一维数组)
3.第一个一维数组有3个元素,第二个一维数组有3个元素,第三个一维数组有1个元素
通过了解上面的三种初始化的方式,我们大致可以知道,初始化二维数组的方式有三种,接下来通过代码更将清楚的了解。
int[][] arr1 = {{1, 2, 3}, {1, 2}};这里表示创建了一个2行3列的一个二位数组,因为二维数组是由一维数组组成的,相当于在二维数组中,第一个一维数组中有三个元素,第二个一维数组中,有2个元素
代码演示:
package com.array;
/**
* 演示 二维数组的使用
*/
public class TwoDimensionalArray01 {
public static void main(String[] args) {
//讲解二维数组初始化的三种方式
// 1.动态初始化(第一种方式)
// 语法:类型[]]数组名=new 类型大小
// 比如
//int[][] arr = new int[2][3];//表示创建了一个2行3列的二维数组
// 2.动态初始化(第二种方式)
// 先声明:类型 数组名[][]
// 再定义(开辟空间)数组名 =new类型大小
// 赋值(有默认值,比如int类型的就是0)
int[][] arr;//先声明数组但是并没有为该数组在内存中分配空间
arr = new int[2][3];//这里是真的创建数组,会在内存中分配空间
// 3.静态初始化
// 1.定义 类型 数组名三((值1,值2..),(值1,值2..),(值1,值2..》
// 2.使用即可固定方式访问]
// 解读
// 1.定义了一个二维数组 arr[][]
// 2.arr有三个元素(每个元素都是一维数组)
// 3.第一个一维数组有3个元素,第二个一维数组有3个元素,第三个一维数组有1个元素
//这里表示创建了一个2行3列的一个二位数组,因为二维数组是由一维数组组成的,相当于在二维数组中,第一个一维数组中有三个元素,第二个一维数组中,有2个元素
int[][] arr1 = {{1, 2, 3}, {1, 2}};
}
}
二维数组的注意事项和使用细节
1.一维数组的声明方式有: int[]x 或者int x[]
2.二维数组的声明方式有: int y或者 int]y 或者int y[][]
3.二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[][]是一个二维数组 map[]={{1,2},{3,4,5}} 由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组
4.二维数组的列一定不可以省略,要指定具体的数
package com.array;
/**
* 讲解二维数组的细节和注意事项
*/
public class TwoDimensionalArrayDetail {
public static void main(String[] args) {
// 1.一维数组的声明方式有: int[]x 或者int x[]
//一维数组的声明方式
//int[] arr1;
//int arr2[];
// 2.二维数组的声明方式有: int[][] y或者 int[] y[] 或者int y[][]
//二维数组的声明方式
//1.int[][] arr;
//2.int[] arr[];
//3.int arr[][];
// 3.二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。
// 比如:map[][]是一个二维数组 map[]={{1,2},{3,4,5}} 由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组
//创建一个二维数组,使用静态初始化的方式
int[][] arr = {{1, 2}, {3, 4, 5}};//这是一个两行三列的二维数组,二维数组的本质是一维数组,各个一维数组的长度可以不相同
//遍历二维数组
for (int i = 0; i < arr.length; i++) {
//注意在内存循环遍历的时候要写arr[i].length 表示 得到 对应的 每个一维数组的长度 因为二维数组的本质是一维数组
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
二维数组在内存中的形式
二维数组的本质是由一维数组的组成的,因此每一行的元素其实是一个一维数组的地址,通过这个地址去访问到元素
二维数组练习题
杨辉三角
思路分析:
1.因为我们不知道,二维数组是几行,因此我们并没有指定行的具体值
2.在遍历二维数组的时候,因为杨辉三角的本质就是一个二维数组,而二维数组的本质是一维数组,因为我们在创建二维数组的时候,并没有指定行的具体值,因此,相当于并没有给一维数组开辟空间,如果不单独为一维数组的开辟则默认为null
3.一定要找到的规律,第一列和最后一列都是1 ,然后从第三行开始,
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];这个规律一定要找到
package com.array;
/**
* 二维数组的练习题 -> 杨辉三角
*/
public class YangHuiTriangle {
public static void main(String[] args) {
/**
* 注意二维数组的行一定要指定否则语法会报错
*/
int arr[][] = new int[10][];//创建一个二维数组由于不确定每行的个数所以不指定大小
for (int i = 0; i < arr.length; i++) {//遍历这个二维数组里有几个一维数组
//第一行有一个元素第二行有2个元素第n行有n个元素
//所以在开辟空间的时候用i+1因为i从0开始,因此这样刚好,开辟的大小,刚刚好和需要的长度相同
//如果没有这句话的话,并没有给一维数组开辟空间,因为二维数组的本质是一维数组,我们在创建二维数组的时候也没有指定列的具体值,因此这里我们需要为一维数组开辟空间
arr[i] = new int[i + 1];//给每个一维数组开辟空间如果不开辟空间默认为null
for (int j = 0; j < arr[i].length; j++) {
if (j == 0 || j == arr[i].length - 1) {//杨辉三角的第一列和最后一列都是1
arr[i][j] = 1;
} else {
//剩下的情况是
//从第三行开始arr[i][j]=arr[i-1][j]+arr[i-1][j-1]
//这是规律必须找到
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();
}
}
}