二维数组
声明与创建
// 声明一个二维数组
int[][] array ;
// 创建一个二维数组 长度为5
array = new int[5][];
// 数组套数组,未定义二层 。默认为null
System.out.println(ArrayUtils.toString(array));
// {<null>,<null>,<null>,<null>,<null>}
array = new int[5][4];
System.out.println(ArrayUtils.toString(array));
// {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
// 声明与创建同时进行,与一维数组格式基本相同
int[][] array2 = new int[4][3];
System.out.println(ArrayUtils.toString(array2));
// {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}
int[][] array3 = new int[][]{{1,2},{3,4},{5,6},{7,8}};
System.out.println(ArrayUtils.toString(array3));
// {{1,2},{3,4},{5,6},{7,8}}
int[][] array4 = {{1,2},{3,4},{5,6},{7,8}};
System.out.println(ArrayUtils.toString(array4));
// {{1,2},{3,4},{5,6},{7,8}}
二维数组经典案例 - 行列交换
// 定义一个 4行3列的二维数组
int[][] array = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
// 转换行列实现一个新的二维数组
// 声明转换后的 二维数组长度
int[][] newarray = new int[3][4];
// 外层for循环控制行,内层for循环控制列
for (int i = 0; i < array.length; i++) {
for (int j = 0 ; j < array[i].length; j++){
// 分析前后位置变化,得出行列交换即可
newarray[j][i] = array[i][j];
}
}
// 打印二维数组 内容
System.out.println(ArrayUtils.toString(newarray));
// {{1,4,7,10},{2,5,8,11},{3,6,9,12}}
二维数组经典案例 - 杨辉三角
杨辉三角
- 第 n 行 有 n 个 项 , i 代表 行
- 起始值 和 结束值 都是 1
- 第 j 项 ( j !=0 && j!=i), j = [i-1][j-1] + [i-1][j]
打印 前10行的杨辉三角
// 创建一个长度为 10 的二维数组
int[][] array = new int[10][];
// 循环每一行,对每一行进行个数控制
for (int i = 0; i < array.length; i++) {
// 第 i 行 ,i + 1 个元素
int[] arr = new int[i + 1];
for (int j = 0; j < arr.length; j++) {
// 首尾都为1
if(j == 0 || j == i) arr[j] = 1;
// 除了首尾部,其他位置均为 上一行的前一项 + 上一行的当前项
else arr[j] = array[i - 1 ][j - 1] + array[i - 1][j];
}
// 将每行的数据进行赋值
array[i] = arr;
}
//System.out.println(ArrayUtils.toString(array));
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]+"\t");
}
System.out.println();
}