Java数组及其内存分配(二)

二维数组

二维数组其实就是每一个元素为一维数组的数组。

二维数组的格式1:

数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组,必须写上,n表示每一个一维数组的元素个数,可写可不写。
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr,这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2],每个一维数组有2个元素,可以通过arr[m] [n]来获取。
还有两种不常用的格式:
a:数据类型 数组名[][] = new 数据类型[m][n];
b:数据类型[] 数组名[] = new 数据类型[m][n];

内存图解:

在这里插入图片描述

二维数组的格式2:

数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。

内存图解

在这里插入图片描述

案例演示:
public class ArrayDemo {
    public static void main(String[] args) {
        //定义二维数组
        int[][] arr = new int[2][2];
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        //定义两个一维数组
        int[] arrone = {10, 20, 30};
        int[] arrrtow = {20, 100, 30};
        //重新给二维数组中的元素赋值
        arr[0] = arrone;
        arr[1] = arrrtow;
        //输出二维数组中的一维数组
        ShowArray(arr[0]);
        ShowArray(arr[1]);
        //重新给二维数组中的元素赋值并输出
        arr[1][2] = 300;
        arr[1][arrrtow.length - 1] = 500;
        System.out.println(arr[arr.length - 1][arrrtow.length - 1]);
        System.out.println(arr.length);
    }

    public static void ShowArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }
}
运行结果:在这里插入图片描述

二维数组的遍历

外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。

public class Demo {
    public static void main(String[] args) {
        int[][] arr = new int[][]{{10, 20, 30}, {5, 6}, {6, 8}};
        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();
        }
    }
}
运行结果:

在这里插入图片描述

案例演示:

 /*A:
        案例演示
        需求:公司年销售额求和
        某公司按照季度和月份统计的数据如下:单位(万元)
        第一季度:22, 66, 44
        第二季度:77, 33, 88
        第三季度:25, 45, 65
        第四季度:11, 66, 99
*/
public class SumArray {
    public static void main(String[] args) {
        int[][] arr = new int[4][3];
        
        int[] one = {22, 66, 44};
        int[] two = {77, 33, 88};
        int[] three = {25, 45, 65};
        int[] four = {11, 66, 99};

        arr[0] = one;
        arr[1] = two;
        arr[2] = three;
        arr[3] = four;

        //遍历二维数组的元素,累加求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                sum += arr[i][j];
            }
        }
        System.out.println("总销售额" + sum);
    }
}
运行结果:

在这里插入图片描述

案例演示:

/*
需求:打印杨辉三角形(行数可以键盘录入)
1
1  1
1  2  1
1  3  3  1
1  4  6  4  1
1  5  10 10 5  1
*/
import java.util.Scanner;

public class Yang {
    public static void main(String[] args) {
  	Scanner sc = new Scanner(System.in);
        System.out.println("请输入行数:");
        int n = sc.nextInt();
        int[][] arr = new int[n][n];
        for (int i = 0; i < arr.length; i++) {
            arr[i][0] = 1;//每行的首元素为1
            arr[i][i] = 1;//对角线为1
        }
        for (int i = 2; i < arr.length; i++) {
            for (int j = 1; j <= i; j++) {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}
运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值