数组:(1)一次性声明大量的用于存储数据的变量(2)存储数据通常为同类型数据
一、一维数组
(1)定义:存储多个相同数据类型的存储模型
(2)格式:数据类型 [] 数组名; 或 数据类型 数组名 [];
(3)数组初始化:为数组每一个数据元素分配内存空间并且赋值
1、静态初始化:人决定数组元素初始值,系统决定数组长度(即数组元素个数)
格式:数据类型 [] 数组名/变量名 ={数据1,数据2,...};
2、动态初始化:人决定数组长度,系统决定数组初始值(整型数组默认初始值是0)
格式:数据类型 [] 数组名/变量名 =new 数据类型[数组长度];
3、数组索引和数组长度:
(1)索引:数组中数据的编号方式,用于访问数组中的数据
特点:(1)从0开始编号;(2)连续且逐次加一;(3)最大索引=数组长度-1
使用方法:数组名[索引]相当于一个变量,若对它进行赋值运算,则表现为改变数组元素,
(2)数组长度(元素个数):数组名.length
使用方法:数组一旦定义完成,数组名.length 相当于一个已知数,直接使用
4、数组元素访问:
(1)out.println 数组名:输出结果为数组地址名
(2)out.println 数组名[索引]:输出结果为索引对应的数组元素
€1. 一维数组定义、静态初始化、访问数组名、索引、修改数组元素练习如下
5、练习一维数组常见操作(因为,数组长度是确定的,数组中常见操作是for循环)
€2 数组遍历:将一维数组中的数据元素全部输出:(运用for 循环+索引:数组名[])
€3 一维数组中取出最大的数据练习如下
分析:一组数据对比取出最大值,可以按照索引顺序,两两比较取最大值再与下一个数据比较取大。运用程序:for循环、三元运算符
€4 一维数组元素打乱练习如下(数组中的元素位置任意调换,无重复无遗漏)
分析:(1)数据元素由索引一一对应,对索引作交换赋值,实现元素位置交换;(2)要想任意打乱,索引中的编号应是在数组长度范围内随意变换,可以采用随机数生成
€5 一维数组动态初始化练习
6、一维数组内存图
(1)索引越界:当索引>=数组长度时,无法输出访问的数据元素
(2)空指针异常:对数组名赋空值时,即arr=null;此时对象不再指向堆内存,如下练习所示
二、二维数组
1、概念性知识
(1)定义:元素为一维数组的数组(存储多个一维数组的存储模型)
(2)格式:数据类型 [][] 数组名; 或 数据类型 数组名 [][]; 或数据类型 [] 数组名 [];
//tip:数组定义格式为 数据类型数和组名跟[]或者[][]的全排列的组合
(3)静态初始化格式:数据类型 [][]数组名/变量名 ={{数据1,数据2,...},{数据n,数据n+1}…};
//tip:二维数组是由多个一维数组构成的数组,每个一维数组长度不一定相等但一定是同类型
(4)动态初始化格式:数据类型 [][]数组名/变量名 =new 数据类型 [m][n];
//tip:m是一维数组的个数,n是一维数组的长度
note:二维数组静态初始化可以输入长度不同的一维数组,动态初始化只能输入相同长度的一维数组
(5)数组索引和数组长度:
(1)数组名[i]指的是作为元素的第i-1个一维数组,直接输出获得该一维数组的地址名
(2)数组名[i][j]指的是第i-1个一维数组中第j-1个数据元素
(3)数组名.length表示二维数组的长度
(4)数组名[i].length表示二维数组中第i-1个一维数组的长度
2、二维数组常见操作练习如下(for循环嵌套使用)
€1 静态初始化一个二维数组并且完成数组遍历
€2 二维数组中数据元素打乱 练习(同理于一维数组,此处需要两个随机索引,并且使用循环嵌套)
3、二维数组内存图