先写一个简单的二维数组吧!
1 2 3
4 5 6
7 8 9
public class Arr1{
public static void main(String[] args){
int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
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[1][1]时,我得到的结果是5
二维数组的使用:配合二维数组的图食用
动态初始化:
类型[][] 数组名 = new 类型[大小][大小]; int [][] arr = new int[3][5];//写了一个3行5列的二维数组,3行5列指数据空间【可以理解为arr二维数组里有3个一维数组,每个一维数组有5个元素】
动态初始化2:
先声明:类型 数组名[][]; 再开辟空间:数组名 = new int[大小][大小]; //赋值有默认值,比如int类型就是0
使用方式3:列数不确定
1
2 2
3 3 3
int arr[][];
arr = new int[3][];//创建了二维数组,但是只确定了一维数组的个数(3),并没有给一维数组开辟空间【不确定一维数组里元素的个数】
for(int i = 0;i<arr.length;i++){
arr[i] = new int[i+1];//arr[i]是二维数组的元素,也就是下标为i的一维数组,指为下标为i的这个一维数组开辟i+1的空间
for(int j = 0;j<arr[i].length;j++){//遍历一维数组
arr[i][j] = i+1;
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
二维数组在内存中是怎样的?
二维数组不同于一维数组,一维数组是是指向地址,地址指向空间,二维数组的空间是一维数组的地址,后由一维数组的地址指向空间
图片来自于b站韩老师
二维数组的细节:
1.一维数组的声明方式
int[] x 或者 int x[]
二维数组的声明方式
int[][] y 或者 int[]y[] 或者 int y[][]
2.二维数组实际上是多个一维数组组成的,它的各个一维数组长度可以相同也可以不同。
例:int arr[] = {{1,22,3}{1}};arr[0]是一个含有三个元素的一维数组,arr[1]是一个含有一个元素的一维数组,这种二维数组称为列数不等的二维数组。
打印一个10行的杨辉三角吧!
int arr[][];
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++){
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];//中间的元素等于上一行同一列这个元素加上上一行前一列的元素
}
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
输出结果: