专业编程基础技术教程

网站首页 > 基础教程 正文

“全栈2019”Java第二十八章:数组详解(上篇)

ccvgpt 2024-08-01 11:30:28 基础教程 8 ℃

难度

初级

学习时间

30分钟

“全栈2019”Java第二十八章:数组详解(上篇)

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

1.什么是数组?

抛砖引玉:

我们前面学过8大基本数据类型,如int x:

但是,这个变量x只能存储一个数字,要么存储1,要么存储2,它不能存1、2、3等等很多数字。那你为什么要存很多数字呢?有什么样的需求呢?

需求:

有一家网店,获得了3个评分,请先显示输出这个3个评分,然后求平均评分是几分。

思路:

  1. 定义三个变量分别对应三个评分
  2. 将三个评分加起来,然后除以3求平均评分

实现:

结果:

讨论:

从运行结果来看,完全正确没有错误,但是从代码上来看就有问题,为什么呢?

这是3个评分,算少的,假如有100个评分呢?

定义变量从star1、star2一直到star100?

首先,评分的名字我们需要知道吗?不需要!

也就说我们只需要找一个地方将这些评分存储起来,到时候要用拿出就行。

也就是说,我们需要一个容器?

对,需要一个容器。

接下来,给大家介绍一个容器,它叫数组

定义:

数组是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。

2.数组的声明

数组是通过中括号[]来定义和使用的。要定义一个数组,只需在类型名后加上一个中括号[]即可。如:

或者,中括号[]置于标识符后面:

推荐使用第一种:float[] stars;

3.数组的初始化

要使用数组,除了声明以外,还必须得初始化。

数组初始化有三种初始化方式。

  1. 数据类型[] 标识符 = {元素1,元素2...};
  2. new 数据类型[];
  3. new 数据类型{元素1,元素2...};

无论使用哪种初始化方式,非常重要的一点是:数组初始化必须明确数组的长度!!!

我们先来看第一种方式。

大家可以看到的是,stars数组是一个float类型数组,它里面有三个初始值3.5、4.0、3.0。

结论:

使用大括号{}初始化数组的时机是你已经知道数组有哪几个元素。换言之,就是你已经知你创建的这个数组要存储的元素是什么的时候,你就可以使用大括号{}初始化。

前面不是说数组初始化必须明确数组的长度吗?我怎么没看见指定数组长度的操作?那是因为当数组使用大括号{}初始化数组时,大括号{}里面写多少元素,那么数组的长度就是多少。

上面例子中,starts数组的长度是3。

再来看第二种数组初始化方式。

new是一个新关键字,用于创建对象。new关键字后续文章会有详细讲解。暂时理解为它可以开辟一块存储空间,供数组存放数据。

我们看到new float[3],其中中括号表示数组,3表示数组长度。

接下来,我们来看第三种方式:

代码实现:

和第一种定义数组的方式很类似,其实,第一种就是上面这种方式的简写形式。

4.获取数组中的元素

现在数组初始化了,怎么获取数组中的元素?什么叫元素?来看下图:

绿色的那一行是元素序列,里面的每一个值都称之为元素。如第一个元素为3.5,第二个元素为4.0,第三个元素3.0。

灰色的那一行是下标序列,里面的每一个值都称之为下标,数组的下标默认是从0开始的。

怎么获取数组里面的元素呢?

可以通过数组下标来获取对于的元素。

格式:

例如,获取第一个元素:stars[0];第二个元素:stars[1];

实现:

结果:

5.数组最大下标

需求:

定义一个数组,初始值为1、2、3,依次显示输出它们,然后计算数组内所有元素之和并显示输出。

思路:

  1. 定义一个int类型的数组。
  2. 已经知道存储1、2、3三个数字,所以可以使用大括号{}初始化数组。
  3. 使用下标取出数组内所有元素并显示输出,然后计算它们之和并显示输出。

实现:

结果:

从运行结果来看,正确无误。

该例中,我们从0开始取下标,取了0、1、2,如果我们取下标为3的元素会是什么?我们来看一下。

实现:

结果:

错误信息:

文字版:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

意思是发生了一个java.lang.ArrayIndexOutOfBoundsException异常,异常原因是:Index 3 out of bounds for length 3。

异常是什么意思?

异常暂时先没讲解到,大家先理解为程序发生错误,代码写的不对。

ArrayIndexOutOfBoundsException是什么意思?

数组索引超出界限异常,索引就是下标,超出界限就是下标超出最大下标界限。

最大下标怎么获取?

最大下标 = 数组长度 - 1。

比如本例中的numbers数组的长度为3,那么它的最大下标是3-1=2,numbers数组最大下标为2。

6.数组的长度length

需求:

定义一个存储正整数的数组,数字是10以内的正整数,显示输出数组长度和最后一个元素。

思路:

  1. 定义一个int类型的数组。
  2. 既然已经知道是10以内的正整数,那么就使用大括号{}初始化数组。
  3. 获取最大下标。

实现:

结果:

从运行结果来看,正确无误。

但是从书写程序的思路来看,有点不妥,哪里不妥呢?

计算数组长度的地方不妥,本例中,我们知道大括号里面有多少个元素,所以可以很快通过数数得到数组的长度。

假如有更多的元素,我们还能通过数数得到数组的长度吗?能肯定能,就是不知道数到猴年马月去了。

有没有一种简单快速地获取数组长度方式呢?

答案是有的。

在数组对象中,有一个叫“length”的成员,它专门记录数组的长度。

下面我们来试试它吧:

结果:

从运行结果来看,正确无误。

而且我们还能显示输出一下数组的长度:

结果:

数组长度为9,也是正确的。

以后大家获取数组的长度请使用数组的length成员变量。

6.遍历数组

7.for循环遍历数组

8.while循环遍历数组

9.do-while遍历数组

11.数组的引用

12.大括号{}初始化数组的妙用

new String({'a','b','c'});

本章总结:

  • 数组是一系列相同类型的序列。
  • 数组的定义方式一:数据类型 标识符[]
  • 数组的定义方式二:数据类型[] 标识符
  • 数组的初始化方式一:数据类型[] 标识符 = {元素1,元素2......}
  • 数组的初始化方式二:数据类型[] 标识符 = new 数据类型[长度];
  • 数组的初始化方式三:数据类型[] 标识符 = new 数据类型[]{元素1,元素2......}
  • 数组的初始化必须指定长度。
  • 数组的长度通过length成员获取。
  • 数组的最大下标 = 数组的长度 - 1。
  • 数组下标越界异常是ArrayIndexOutOfBoundsException。下标的取值范围在0-最大下标之间,请勿越界。

至此,Java中数组详解相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第二十七章:流程控制语句中循环语句for

下一章

“全栈2019”Java第二十九章:数组详解(中篇)

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

版权声明

原创不易,未经允许不得转载!

Tags:

最近发表
标签列表