09-二维数组
二维数组介绍
二维数组可以被看作数组的数组。实质上是由多个一维数组所组成的,其各个一维数组的长度可以相同,也可以不相同。
在Java中,二维数组也要求其内部的一维数组具有相同的数据类型,即只能储存同一种数据类型,不能出现多种数据类型。
二维数组的声明和创建
数组定义格式:
a) 数据类型[][] 数组名; 例如 int[][] array; //首选的方法
b) 数据类型 数组名[][]; 例如 int array[][]; //不是首选的方法,但效果相同
c) 数据类型[] 数组名[]; 例如 int[] array[]; //不是首选的方法,但效果相同
二维数组的初始化
a) 动态初始化:在声明的同时创建数组对象
格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];
例如 int[][] arr = new int[2][3]; arr数组里面有两个一维数组,每个一维数组里面有三个元素
public class TwoDimensionalArray02{ public static void main(String[] args){ //动态初始化:在声明的同时创建数组对象 //格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度]; //arr数组里面有两个一维数组,每个一维数组里面有三个元素 int[][] arr = new int[2][3]; //遍历arr的每个一维数组 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(""); } } }
格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][];
例如 int[][] arr = new int[2][]; arr数组里面有两个一维数组,但每个一维数组里面的元素个素可以是不一样的
public class TwoDimensionalArray03{ public static void main(String[] args){ /** * 动态初始化:先声明再定义数组对象(开辟数组空间) * 格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][]; * * 有一个需求:动态地创建一个二维数组,并输出 * * i = 0: 1 * i = 1: 2 2 * i = 2: 3 3 3 * * 一共有三个一维数组,每个一维数组的元素是不一样的 * */ //arr数组里面有两个一维数组,但每个一维数组里面的元素个素可以是不一样的 int[][] arr = new int[3][]; //遍历arr的每个一维数组 for(int i = 0; i < arr.length; i++){ //这里需要注意,要给每个一维数组开辟空间 new //如果没有给一维数组 new ,那么 arr[i] 就是 null 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(""); } } }
c) 静态初始化:在声明的同时对数组进行赋值
完整格式为:数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};
简化格式为:数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};
public class TwoDimensionalArray04{ public static void main(String[] args){ //静态初始化:在声明的同时对数组进行赋值 //完整格式为:数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}}; //简化格式为:数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}}; int[][] arr = {{1,1,1},{8,8,9},{10}}; //这里需要注意,二维数组,只能存储多种同一类型的数组,否则会数据类型不匹配 //int[][] arr2 = {{1,1,1},{8,8,9},10}; 错误: 不兼容的类型: int无法转换为int[] //int[][] arr3 = {{1,1,1},{2.0,4.0,8.0}}; 错误: 不兼容的类型: 从double转换到int可能会有损失 //int[][] arr4 = {{1,1,1},{"a","b","c"}}; 错误: 不兼容的类型: String无法转换为int } }
二维数组的内存图
练习:使用二维数组打印一个10行 杨辉三角
public class YangHui{ public static void main(String[] args){ /** * 杨辉三角 * 1 * 1 1 * 1 2 1 * 1 3 3 1 * 1 4 6 4 1 * 1 5 10 10 5 1 * ... * * 提示: * 1. 第一行有1个元素,第n行有n个元素 * 2. 每一行的第一个元素和最后一个元素都是1 * 3. 从第三行开始,对于非第一个元素和最后一个元素的元素值 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++){ //判断是否是第一个或最后一个元素 if(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] + "\t"); } System.out.println(""); } } }