11_Java筑基之二维数组
1. 二维数组的概念
本质上还是一个一维数组,只是其数组元素又是一个一维数组.
举例说明:
变量,一维数组,二维数组之间的关系.
买烟的例子:
没钱: 一根烟 一个变量
稍微有钱 一包烟 一维数组
有钱 一条烟 【20根】
2. 二维数组的定义
方式一: 元素类型[][] 数组名称;
方式二: 元素类型 数组名称[][];
推荐使用方式一.
3. 数组的初始化
3.1 静态初始化
语法: 元素类型[][] 数组名称 = new 元素类型[][]{{一维数组1,一维数组2,一维数组3....};
简化: 元素类型[][] 数组名称 =m{{一维数组1,一维数组2,一维数组3....};
举例:
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};
3.2 动态初始化
语法: 元素类型[][] 数组名称 = new 元素类型[二维数组的长度][一维数组的长度];
举例:
int[][] arr = new int[3][4];
说明:
定义一个数组arr,二维数组中一维数组的个数为3个,每个一维数组中元素的个数为4个.
4. 二维数组的访问
4.1 通过下标访问二维的指定元素
class TwiceArrayDemo01{
public static void main(String[] args){
int[][] arr = new int[3][4];
System.out.println(arr);
System.out.println(arr.length);//3
System.out.println(arr[0]);
System.out.println(arr[0].length);//4
System.out.println(Arrays.toString(arr));
//[0, 0, 0, 0]
System.out.println(Arrays.toString(arr[0]));
}
}
4.2 遍历二维数组
//常见的操作:遍历二维数组
class TwiceArrayDemo02 {
public static void main(String[] args){
//如果二维数组中一维数组的元素个数不确定
//int[][] arr = new int[3][];
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
//遍历arr
for(int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
//赋值:给arr中的第1个元素修改值
arr[1] = new int[2];
//给arr[0]中的第0个元素修改值
arr[0][0] = 10;
//遍历arr[0]
for(int i = 0;i < arr[0].length;i++){
System.out.println(arr[0][i]);
}
//二维数组的遍历:嵌套for循环
//简单for循环
for(int i = 0;i < arr.length;i++) {
int[] subArr = arr[i];
for(int j=0;j<subArr.length;j++){
System.out.println(subArr[j]);
}
}
//增强for循环
for(int[] subArr1:arr) {
for(int n:subArr1) {
System.out.println(n);
}
}
}
}
上机练习:
一个班级有两门课程,5个学生,使用二维数组保存每门课的成绩,并计算每门课的总分与平均分.
public static void main(String[] args) {
double[][] scores=new double[2][5];
Scanner input=new Scanner(System.in);
for(int i=0;i<scores.length;i++){
for(int j=0;j<scores[i].length;j++){
System.out.println("请输入第"+(i+1)+"门课,第"+(j+1)+"个学生的成绩");
scores[i][j]=input.nextDouble();
}
}
System.out.println("------------------");
for(int i=0;i<scores.length;i++) {
double sum=0;
for(int j=0;j<scores[i].length;j++){
sum+=scores[i][j];
}
System.out.println("第"+(i+1)+"门课的总分是:"+sum);
System.out.println("第"+(i+1)+"门课的平均分是:"+(sum/5));
}
}
5. 二维数组内存分析
public static void main(String[] args) {
int[][] nums={{10,20,30},{40,50,60}};
int[][] nums2={{1,2},{3,4},{5,6}};
int[][] nums3=new int[3][2];
int[][] nums4=new int[2][];
}
5.1 画图分析