【Java】学习日记 Day12

image-20220702163210840
作者|Rickyの水果摊

时间|2022年7月14日


🌈 今日知识点总结

Java 二维数组

1. 二维数组的初始化
动态初始化:
//方式1:声明数组后直接 new 分配空间
int[][] arr0 = new int[3][5]; 

int[][] arr1 = new int[3][]; //二维数组每行的元素个数可以不等,第二个方括号内不指定数字即可
arr1[0] = new int[1];    //这种情况需要new两次,原因见下文「二维数组的内存布局」
arr1[0] = new int[2];
arr1[0] = new int[3];

//方式2:先声明数组,再 new 分配空间
int[][] arr2;
arr2 = new int[3][5];

//二维数组的循环赋值
for(int i = 0;i < arr2.length;i++){   //arr2.length表示二维数组包含的一维数组个数
  for(int j = 0;j < arr2[i].length;j++){ //arr2[i].length表示每个一维数组包含的元素个数
  	arr2[i][j] = myScanner.nextInt();
  }
}

静态初始化:
int[][] arr = {{1,2,3,4},{1,2,3,4,5},{1,2,3,4,5,6}}

2. 二维数组的内存布局

image-20220713225857814

【视频讲解】二维数组的内存布局—B站(韩顺平老师)


3. 二维数组注意点

🍉 PS1:二维数组有 三种定义方式,三者均等价。

  • int[][] arr
  • int[] arr[]
  • int arr[][]

🍉 PS2:二维数组 由多个一维数组构成,数组名后的 方括号数量不同,代表的内容也完全不同。

  • arr 表示二维数组 本身,是 int[][] 类型。

  • arr[n] 表示二维数组中的 某一个一维数组,是 int[] 类型。

  • arr[n][m] 表示二维数组中的 某一个具体元素,是 int 类型。

示例程序

int[][] arr = new int[3][5];
arr        //是int[][]类型,即为二维数组
arr[1]     //是int[]类型,即为一维数组
arr[1][1]  //是int 类型,即一个具体的元素

判断题

声明 int[] x,y[],判断以下语句是否能够通过编译。

1. x[0] = y;

2. y[0] = x;

3. y[0][0] = x;

4. x[0][0] = y;

5. y[0][0] = x[0];

6. x = y;
  1. yint[][] 类型,x[0]int 类型,int[][] 不可以赋值给 int 类型。
  2. xint[] 类型,y[0]int[] 类型,相同类型可以赋值。
  3. xint[] 类型,y[0][0]int 类型,int[] 不可以赋值给 int 类型。
  4. x 为一维数组,没有第二个下标。
  5. x[0]int 类型,y[0][0]int 类型,相同类型可以赋值。
  6. yint[][] 类型,xint[] 类型,int[][] 不可以赋值给 int[] 类型。

🍉 PS3:二维数组中的一维数组元素个数可以相等,也可以不相等,后者称为「列数不等的二维数组」。

int[][] arr1 = new int[3][]   //动态初始化「列数不等的二维数组」

int[][] arr = {{1},{1,2},{1,2,3},{1,2,3,4}} //静态初始化「列数不等的二维数组」
//arr[0] 包含1个元素
//arr[1] 包含2个元素
//arr[2] 包含3个元素
//arr[4] 包含4个元素

🍉 PS4:二维数组若列数不确定,且采用动态初始化方式,需 new 两次创建。(结合内存图分析)。

int[][] arr1 = new int[2][3];   //列数确定,一步到位

int [][] arr2 = new int[2][];   //列数不确定,此步仅创建了1个二维数组,包含了2个一维数组名
arr2[0] = new int[3];     //为arr2[0] 分配内存空间
arr2[0] = new int[2];     //为arr2[1] 分配内存空间

🍉 PS5:二维数组中,若某行只有 单个元素,这个元素 也应当由方括号括起来,否则会报错。

int[][] arr = {1,{1,2},{1,2,3}} → 元素1未添加方括号

int[][] arr = {{1},{1,2},{1,2,3}} → 元素1添加方括号后,由 int 变为 int[]


4. 二维数组编程练习
🟢 1. 输出二维数组的元素总和

📝 题目描述

随机生成 2*5 的二维数组,元素范围是 [1,10] 的整数,并且输出该二维数组的元素总和。

🧑🏻‍💻 源代码

public class TwoDimSum {
    public static void main(String[] args){
        int[][] arr = new int[2][5];
        int sum = 0;
        for(int i = 0;i < arr.length;i++){
            for(int j = 0;j < arr[i].length;j++){
                arr[i][j] =(int)(Math.random()*10 + 1);  //随机生成范围为[1,10]的整数
                sum += arr[i][j];
            }
        }
        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("");
        }
        System.out.println("sum = " + sum);
    }
}

🟡 2. 杨辉三角

📝 题目描述

输出一个 6 行的杨辉三角。效果图如下:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1

☘️ 提示:需注意 列数不等的二维数组 创建时的 内存分配问题

🧑🏻‍💻 源代码

public class PascalTriangle {
    public static void main(String[] args){
        int[][] arr = new int[6][];
      
        //生成杨辉三角
        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] + " ");
            }
            System.out.println("");
        }
    }
}

✏️ 今日随记

学习 Java 的 第 12 天。⏰

今天主要整理了二维数组的相关内容,感觉二维数组相比一维数组,还是有不少需要注意的地方。☘️

明天正式开始学习 面向对象,继续加油 ✊

今日摘录:

Talk is cheap.Show me the code 」— Linus Torvalds


相关博客

【Java】学习日记 Day11

【Java】学习日记 Day10

【Java】学习日记Day 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值