文章目录
- 数组初认识
- 数组是什么
- 为什么要有数组
- 数组的分类
- 数组的基本格式
- 数组的初始化
- 什么是数组的初始化
- 初始化的分类
- 动态初始化
- 静态初始化
- 索引的概念
- 数组的操作
- 数组的遍历
- 获取最值
- 元素反转
- 查表法
- 数组元素查找
- 二维数组
- 二位数组的基本格式
- 二维数组的遍历
- 二维数组操作之求和
- 二维数组操作之打印杨辉三角
数组初认识 数组是什么
数组是存储同一种数据类型多个元素的集合,是存储大数量级变量的容器(既可存储基本数据类型,也可存储引用数据类型)
为什么要有数组
比如现在需要统计一个班100名学生的选修课程以及各自该选修课程的考试成绩,再做课程选修人数占比统计以及考试成绩分布等等,按照只引入变量来统计的话,需要在程序中录入100组课程的变量与100组考试成绩的变量,操作量过大很难实现,并且统计时数据量更大,单纯引入变量将无法进行统计。
为了解决这种情况,Java中提供了数组供我们使用,可以将这些相同的数据类型放进一个容器,再进行统一的计算。
数组的分类
- 一维数组(常用)
- 二维数组
数组的基本格式
定义一个数组的格式有两种
int[] arr;
(定义一个int类型的数组arr,当然也可定义其他数据类型比如byte、long、double、char、String等等,注意数组中多个变量的数据类型要一致)int arr[];
(和第一种格式定义的完全相同,通常推荐使用第一种格式)
所谓初始化,就是为数组中的数组元素分配内存空间,并且为每个元素赋值。
Java中数组必须先初始化后才可以使用。
初始化的分类
动态初始化
- 动态初始化是指只给数组制定其中元素个数,有系统先赋默认初始化值
- 格式:
数据类型[] 数据名=new 数据名[数据长度]
- 案例:定义一个int类型的数组arr,这个数组可以存放5个int类型的值
文章图片
索引的概念马上提到
文章图片
- 静态初始化是指给出数组中元素的具体初始化值,由系统判定长度
- 格式:
数据类型[] 数组名 = {元素1,元素2,…};
- 案例:定义一个int类型的数组arr,其中包含1、2、3、4、5
文章图片
文章图片
- 例如我们定义一个数组并输出数组的第三个元素,第三个元素即索引为2的元素;输出第二个元素,第二个元素即索引为1的元素,其他的同理。
文章图片
文章图片
数组的遍历就是输出数组中的每一个元素
此时我们需要用到for循环将数组中元素的索引从0开始依次循环并输出对应元素
- 例如定义一个int类型的数组arr,并依次输出其中每一个元素,相当于依次输出索引为0、1、2、3、4、5……的元素,将索引定义为一个变量 i 并配合for循环,将索引从0循环至arr.length减一(即数组长度减一,对应数组中最后一个元素),并输出对应元素(arr[ i ])。
文章图片
文章图片
- 数组的其他操作基本都建立在遍历的基础上。
获取数组中的最大值和最小值
- 通过遍历数组,并构造一个方法getMax,创建一个int变量max,并将数组中第一个元素的值赋值给max,从第一个元素开始,若后面的元素比前面的大,就把大的元素赋值给max,最后返回max的值即为数组中的最大值。
- 最小值同理如上。
[30,400 154 ,35,2804,49,8000,365]
中的最大值和最小值文章图片
点击此处运行结果
元素反转
- 通过遍历数组,运用中间值实现变量互换,将第一个元素和最后一个元素互换,第二个元素和倒数第二个元素互换,以此类推。在此我们遍历数组时只能遍历数组的一半并将前一半数组的元素和后一半的元素互换,即遍历索引为0—arr.length/2,并对应将索引为“i”的元素与索引为“arr.length-1-i”的元素互换。
- 若遍历整个数组,那么会导致两次互换,则无法实现元素反转的目的。
- 反转后再通过遍历整个数组进行输出
[30,400 154 ,35,2804,49,8000,365]
实现元素反转文章图片
点击此处运行结果
查表法
- 我们需要实现通过键盘录入索引,查找索引对应的数组元素。
- 先运用键盘录入一个索引,然后输出索引为录入索引对应的元素,即arr[录入的索引]。再运用“if”语句,若录入索引超出数组索引范围,则输出“查无此元素”。
- 注意:输入索引为“i”,则输出的是第“i+1”个元素。
[30,400 154 ,35,2804,49,8000,365]
中所对应的元素。文章图片
点击此处运行结果
数组元素查找
- 我们需要实现通过键盘录入一个元素,查找指定元素在第一次在数组中出现的索引。
- 需要创建一个方法,并将数组进行遍历,运用“if”条件语句,若数组中的元素与录入元素一致,则返回此元素的索引,即
if(录入的元素==arr[i]){sout(i)};
。再在方法外运用“if”若方法返回值为-1,则输出“查无元素所匹配的索引”。
例如录入一个元素,查询此元素在数组["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
中所对应的索引。(注意:判断两个字符串内容是否相同,得调用 equals()方法来判断)
文章图片
点击此处运行结果2
二维数组 二位数组的基本格式
-
数据类型[][] 变量名 = new 数据类型[m][n];
- 这种格式属于动态初始化
- m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
-
arr[m][n]
表示第m+1个一维数组的第n+1个元素
-
数据类型[][] 变量名 = new 数据类型[m][];
- m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
例如int[][] arr = new int[3][]; arr[0] = new int[2]; arr[1] = new int[3]; arr[2] = new int[1];
-
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
- 这个格式属于静态初始化
例如int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
遍历二维数组只需运用“for”循环语言的嵌套,外外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。
文章图片
文章图片
二维数组操作之求和
例如求公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
- 首先每个季度可以看做一个一维数组,整个数据可以看做一个元素为每季度数据的二维数组
-然后通过遍历二维数组,创建一个变量“sum”并赋值为0,并将第一个元素的值+“sum”的值赋给“sum”,再将第二个元素+第一个元素的值即第二个元素+“sum”的值赋给sum,以此类推到最后一个元素。
文章图片
点击此处运行结果
要求打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
- 首先我们要找出杨辉三角的规律
1.任何一行的第一列和最后一列都是1(二维数组中所有数组的第一个元素和最后一个元素)
2 从第三行第二列(二维数组中第三个一维数组的第二个元素)开始,每一个数据是它上一行的前一列和它上一行的本列之和 - 我们发现杨辉三角的行数与列数相同,所以首先可以定义一个二维数组,其中包含n个一维数组,每个一维数组中包含n个元素。(n由键盘录入)
- 按照杨辉三角的规律给元素赋值,并运用二维数组遍历和打印不换行(
System.out.print()
)和换行(System.out.println()
)来实现元素三角形的排布。
文章图片
文章图片
推荐阅读
- 封装
- 多态和对象的转型
- 记一次根据实体类的属性名来给属性名赋值,根据属性名得到属性名的值,其中使用的是JsonProperty属性名
- 记一次代码的回滚到某一次
- 通过数据库配置实现一个策略模式
- java开发|Axon框架深入使用的一点经验
- 牛客Java专项练习错题总结
- Java开发|js 解决Safari浏览器中实现支付宝网页支付无法拉取支付宝APP的问题
- java基础类库学习 java.sql(4)如何处理BLOB类型数据
- #|BigDecimal类中的double类型值的加减问题-java