JAVASE 【Java基础四之数组】

JAVASE 【Java基础四之数组】

1.数组

  • 1.1概念

一组相同类型数据的容器。

  • 相同类型:Java语言要求存入数组的数据类型必须一致
  • 容器:类似于生活中存放物品的容器,在编程的世界中,『容器』可以用来存放数据
  • 一组:容器中可以存放多个数据
  • 1.2声明数组变量
int[] ageArray;
String[] nameArray;
double salaryArray [];

虽然[]也可以放在变量名的后面,但是还是建议放在类型的后面。

        // 声明数组时不能在方括号中指定数组长度
        char[5] tipArray;
  • 1.3创建数组对象

  • 1.3.1 动态创建数组

ageArray = new int[5];
  • 1.3.2静态创建数组

此时[]中不能写数字指定长度

nameArray = new String[]{"foo", "bar", "biz"};

也可以这么写:

int[] numberArray = {5, 7, 11, 13, 17, 19};
  • 1.4将数据存入数组
ageArray[0] = 10;
ageArray[1] = 11;
ageArray[2] = 12;
ageArray[3] = 13;
ageArray[4] = 14;
        
nameArray[0] = "aaa";
nameArray[1] = "bbb";
nameArray[2] = "ccc";
  • 1.5从数组中读取数据
System.out.println("ageArray[0] = " + ageArray[0]);
System.out.println("ageArray[1] = " + ageArray[1]);
System.out.println("ageArray[2] = " + ageArray[2]);
System.out.println("ageArray[3] = " + ageArray[3]);
System.out.println("ageArray[4] = " + ageArray[4]);

System.out.println("nameArray[0] = " + nameArray[0]);
System.out.println("nameArray[1] = " + nameArray[1]);
System.out.println("nameArray[2] = " + nameArray[2]);
  • 1.6遍历数组
// 6.遍历数组(通过循环依次读取数组中的每一个值)
// 遍历数组的起点:数组下标0
// 遍历数组的终点:数组长度-1
for (int i = 0; i < ageArray.length; i++) {

    // 在遍历过程中,使用i作为数组下标访问每一个数组元素
    int age = ageArray[i];
    System.out.println("age = " + age);
}

PS:生成遍历数组的for循环模板的快捷键是数组变量名.fori

  • 数组必须创建对象再访问元素

在这里插入图片描述

  • 数组中元素默认值

系统创建数组对象后,必须分配和数组长度匹配的空间,此时每一个数组元素都会被系统分配默认值。

在这里插入图片描述

2、内存分析

  • 2.1声明基本数据类型变量
int a = 10;

在这里插入图片描述

  • 2.2创建对象
Scanner scanner = new Scanner(System.in);

在这里插入图片描述

  • 2.3创建数组对象

在这里插入图片描述

  • 2.4将数据写入数组
ageArray[1] = 5;

在这里插入图片描述

  • 2.5多声明一个数组变量
int[] otherArray = ageArray;

在这里插入图片描述

  • 2.6通过另一个变量访问数组元素

在这里插入图片描述

  • 2.7数组变量指向新数组对象
otherArray = new int[2];

在这里插入图片描述

  • 2.8给新数组元素赋值
otherArray[1] = 33;

在这里插入图片描述

3、多维数组

  • 3.1概念[逻辑角度]

一维数组

一维数组是线性的结构,通俗来说就是一条线

在这里插入图片描述

二维数组

二维数组通俗来说就是一个面

在这里插入图片描述

三维数组

三维数组就是一个立体的空间结构了

在这里插入图片描述

多维数组的底层内存存储结构
在这里插入图片描述

  • 3.2语法层面

** 创建二维数组格式一**

// 格式1:动态初始化——创建数组对象时就指定了两个维度的数组长度
int[][] arr2d01 = new int[3][2];
arr2d01[0][0] = 100;
arr2d01[0][1] = 101;
arr2d01[1][0] = 102;
arr2d01[1][1] = 103;
arr2d01[2][0] = 104;
arr2d01[2][1] = 105;

在这里插入图片描述

创建二维数组格式二

// 格式2:动态初始化——仅指定第一个维度的数组长度
int[][] arr2d02 = new int[3][];

// Java中多维数组不必都是规则矩阵形式
arr2d02[0] = new int[]{3, 5, 7};
arr2d02[1] = new int[]{14, 21, 66, 89};
arr2d02[2] = new int[]{90, 100};

在这里插入图片描述

创建二维数组格式三

// 格式3:静态初始化——在创建对象时将数据填充
// 此时如果某个元素位置设置为null不会编译报错,但是访问这个位置时还是要先初始化
int[][] arr2d03 = new int[][]{{1,2,3}, {4,5}, null, {6,7,8}};

// 前面设置null的地方,需要初始化才可以访问
arr2d03[2] = new int[]{12,24};
arr2d03[2][0] = 5;

在这里插入图片描述

[4]创建二维数组格式四[不建议]

// 格式4:声明变量时,两层[]没在一起
int[] x[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};

在这里插入图片描述

  • 3.3访问二维数组元素
// 二、访问二维数组元素(读、写)
int[][] arr2d05 = new int[2][2];

// 向数组元素写入数据
arr2d05[1][0] = 10;

// 读取数组元素
System.out.println("arr2d05[1][0] = " + arr2d05[1][0]);
  • 3.4遍历二维数组
// 三、遍历二维数组:需要使用双层嵌套的循环
int[][] arr2d06 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};

// 先遍历第一个维度:取出每一个一维数组
for (int i = 0; i < arr2d06.length; i++) {

    int[] intArr = arr2d06[i];

    for (int j = 0; j < intArr.length; j++) {
        int intValue = intArr[j];
        System.out.println("intValue["+i+"]["+j+"] = " + intValue);
    }

}
  • ⑥杨辉三角练习

在这里插入图片描述

// 1.创建二维数组,第一维长度为10
int[][] yanghuiArr = new int[10][];

// 2.通过双层for循环给二维数组填充数据
for (int i = 0; i < yanghuiArr.length; i++) {

    // 3.创建一维数组,对yanghuiArr下标i位置进行初始化
    yanghuiArr[i] = new int[ i + 1 ];

    // 4.遍历一维数组,填充数据
    for (int j = 0; j <= i; j++) {

        // 5.一头(一维数组的下标0元素)一尾(一维数组的下标长度-1元素)固定就是1
        // 一维数组中最后一个元素的下标正好就是现在外层循环变量:i
        if (j == 0 || j == i) {

            yanghuiArr[i][j] = 1;

        } else {

            // 6.非头尾的元素,由上一行中两个元素相加得到
            // 第一个值的下标:[i-1][j-1]
            // 第二个值的下标:[i-1][j]
            yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j];

        }

    }

}

// 7.遍历填充数据的二维数组
for (int i = 0; i < yanghuiArr.length; i++) {

    int[] yanghuiValueArr = yanghuiArr[i];

    for (int j = 0; j < yanghuiValueArr.length; j++) {

        System.out.print(yanghuiValueArr[j] + "\t");

    }

    System.out.println();

}


    // 一维数组中最后一个元素的下标正好就是现在外层循环变量:i
        if (j == 0 || j == i) {

            yanghuiArr[i][j] = 1;

        } else {

            // 6.非头尾的元素,由上一行中两个元素相加得到
            // 第一个值的下标:[i-1][j-1]
            // 第二个值的下标:[i-1][j]
            yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j];

        }

    }

}

// 7.遍历填充数据的二维数组
for (int i = 0; i < yanghuiArr.length; i++) {

    int[] yanghuiValueArr = yanghuiArr[i];

    for (int j = 0; j < yanghuiValueArr.length; j++) {

        System.out.print(yanghuiValueArr[j] + "\t");

    }

    System.out.println();

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值