之前介绍的各类变量都是单独声明的,倘若要求定义相同类型的一组变量,则需定义许多同类型的变量,显然耗时耗力且不宜维护。为此,编程语言引入了数组的概念,每个数组都由一组相同类型的数据构成,对外有统一的数组名称,对内通过序号区分每个数据元素。
数组类型由基本的变量类型扩展而来,在基本类型后面加上一对方括号,便形成了该类型对应的数组类别。在Java代码中声明数组变量有两种形式,一种是在变量名称后面添加方括号,例如“int primeNumbers[]”;另一种是在类型后面添加方括号,例如“int[] primeNumbers”。两种形式表达的涵义完全一致,都是声明一个名叫primeNumbers的整型数组,只是书写习惯上存在区别。
声明完数组变量,还得给它分配存储空间。一个数组有多长,包含几个元素,这需要程序员事先予以指定。分配数组空间的途径有三种,说明如下:
1、利用语句“new 变量类型[数组长度]”分配空间,比如希望数组primeNumbers能够容纳四个元素,则可通过下面这行语句实现:

		// 在方括号内填入数字,表示数组有多大
primeNumbers = new int[4];

其中关键字new的意思是创建一块存储空间,方括号内部的数字表示该数组的元素个数。
2、在分配存储空间的时候立即对数组进行初始化赋值,此时方括号中间不填数字,而在方括号后面添加花括号,并且花括号内部是以逗号分隔的一组数值。此时初始化赋值的代码如下所示:

		// 方括号内留空,然后紧跟花括号,花括号内部是以逗号分隔的一组数值
primeNumbers = new int[]{2, 3, 5, 7};

3、上面的第二种写法,之所以方括号内没填数字,是因为花括号里已经确定了具体的元素数量。既然程序能够自动推导元素的数量,那么从元素值也能推知该元素的变量类型,如此一来花括号前面的“new int[]”完全是冗余的,于是就形成了以下的简化写法:

		// 以下是分配数组空间的第三种形式:赋值等号右边直接跟着花括号
primeNumbers = {2, 3, 5, 7};

以上的赋值等号右边直接跟着花括号,花括号里面有四个整型数字,这便告诉编译器:该数组需要分配四个元素大小,并且每个元素都是整型数值。

现在数组变量总算占据一块地盘,根据数组名称加上元素序号,即可访问对应位置的数组元素。获取某个数组元素的格式形如“数组名称[元素序号]”,譬如primeNumbers[0]表示获取下标为0的数组元素,Java代码里的下标0对应日常生活中的第一个,因此primeNumbers[0]指的就是第一个数组元素。这个数组元素的用法跟普通变量一样,既能对它赋值,也能把它打印出来。若要打印数组内部的所有元素数值,则可通过循环语句实现,通过“数组名称.length”获取该数组的长度,然后依次打印长度范围之内的所有元素。下面是声明一个整型数组,并对每个数组元素赋值,最后遍历打印各元素的完整代码例子:

		// 以下是声明数组的第一种形式:“变量类型 数组名称[]”
int primeNumbers[];
// 以下是分配数组空间的第一种形式
// 在方括号内填入数字,表示数组有多大
primeNumbers = new int[4];
// 数组名称后面的“[数字]”,就是数组元素的下标,表示当前操作的是第几个数组元素
primeNumbers[0] = 2; // 给下标为0的数组元素赋值,下标0对应日常生活中的第一个
primeNumbers[1] = 3; // 给下标为1的数组元素赋值,下标0对应日常生活中的第二个
primeNumbers[2] = 5; // 给下标为2的数组元素赋值,下标0对应日常生活中的第三个
primeNumbers[3] = 7; // 给下标为3的数组元素赋值,下标0对应日常生活中的第四个
// 下面通过循环语句依次读出数组中的所有元素
// “数组名称.length”表示获取该数组的长度(数组大小)
for (int i=0; i<primeNumbers.length; i++) {
// 打印下标为i的数组元素
System.out.println("prime number = "+primeNumbers[i]);
}

  

数组的一个应用方向为数学上的数列运算,比如常见的斐波那契数列。话说数学家斐波那契养了一对兔子,他发现兔子出生两个月后就有繁殖能力,并且一对兔子每个月能生产一对小兔子,那么一年过后,总共有多少对兔子?这个兔子问题看起来得一个月一个月去数,第一个月只有一对小兔子;第二个月小兔子长成大兔子,但总共仍是一对兔子;第三个月大兔子生下一对小兔子,加起来有两对兔子;第四个月大兔子又生下一对新的小兔子,上个月的小兔子长成大兔子,这下共有三对兔子……这么一路数到第十二个月,把每个月的兔子数量情况整理为下面的一张表格。

上表所示的每月兔子对数就构成了斐波那契数列,它的前12个数字依次为:1、1、2、3、5、8、13、21、34、55、89、144。仔细观察发现该数列有个规律,从第三个数字开始,每个数字都是前两个数字之和,如3=2+1、5=3+2、8=5+3等等。于是大可不必绞尽脑汁去计算每个月的兔子生育情况,完全可以把这项工作交给计算机程序,让Java代码帮助我们求解斐波那契数列。为此先声明一个大小为12的整型数组,接着循环遍历该数组,依次填入每个元素的数值。按照上述思路编写的程序代码示例如下:

		// 声明一个兔子数量(多少对)的数组变量
int rabbitNumbers[];
// 一年有12个月,故兔子数组大小为12
rabbitNumbers = new int[12];
// 循环计算兔子数组在每个月的兔子对数
for (int i=0; i<rabbitNumbers.length; i++) {
if (i < 2) { // 数列的头两个元素都是1
rabbitNumbers[i] = 1;
} else { // 从第三个元素开始,每个元素都等于它的前面两个元素之和
rabbitNumbers[i] = rabbitNumbers[i-2] + rabbitNumbers[i-1];
}
int month = i+1;
// 打印当前的月份和兔子对数
System.out.println("第"+month+"个月,兔子对数="+rabbitNumbers[i]);
}

最后运行这段整型数组的运算代码,得到下列的日志记录,从中可见斐波那契数列的前12个数字。

第1个月,兔子对数=1
第2个月,兔子对数=1
第3个月,兔子对数=2
第4个月,兔子对数=3
第5个月,兔子对数=5
第6个月,兔子对数=8
第7个月,兔子对数=13
第8个月,兔子对数=21
第9个月,兔子对数=34
第10个月,兔子对数=55
第11个月,兔子对数=89
第12个月,兔子对数=144

  

Java开发笔记(二十)一维数组的用法的更多相关文章

  1. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  2. Java开发学习(二十二)----Spring事务属性、事务传播行为

    一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...

  3. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  4. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  5. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  6. Java基础笔记(十)—— 数组

    数组是具有相同类型的数据的集合,是一种引用数据类型,一般具有固定的长度,并且在内存中占据连续的空间. 数组声明:数据类型[ ] 数组名;             数据类型 数组名[ ]; 如:int[ ...

  7. Java开发笔记(十二)布尔变量论道与或非

    在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断.为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”.该类型的变量只允许两个取值,即t ...

  8. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  9. Java开发笔记(十)一元运算符的技巧

    前面讲到赋值运算符的时候,提到“x = x+7”可以被“x += 7”所取代,当然Java编程中给某个变量自加7并不常见,常见的是给某变量自加1,就像走台阶,一般都是一级一级台阶地走,犯不着一下子跳上 ...

  10. Java开发笔记(十六)非此即彼的条件分支

    前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...

随机推荐

  1. javascript的数组之reverse()

    reverse()方法将数组中所有元素的位置颠倒,修改原数组,并返回一个原数组的引用. var array1 = ['one', 'two', 'three']; var reversed = arr ...

  2. python语法_函数

    ---恢复内容开始--- 函数: 1 减少重复代码 2 定义一个功能,需要直接调用 3 保持代码一致性 def  funcation_name(参数s): 功能代码块0 参数可以为多个,传入时按照前后 ...

  3. ava怎样将"1413863429"字符串转换成datetime格式

    .....一般来说应该是一个 毫秒数 String str ="1413863429"; Long timeLong = Long.parseLong(str); SimpleDa ...

  4. Samba部署共享服务

    在本地PC文件共享 Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享资源软件,实现了Windows和Linux系统间的文件共享 1.安装Samba服务程序    yum in ...

  5. 算法与数据结构(八) AOV网的关键路径(Swift版)

    上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...

  6. php.ini中文翻译版--转载

    ;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ; ...

  7. 分享我在 vue 项目中关于 api 请求的一些实现及项目框架

    本文主要简单分享以下四点 如何使用 axios 如何隔离配置 如何模拟数据 分享自己的项目框架 本文主要目的为以下三点 希望能够帮到一些人 希望能够得到一些建议 奉上一个使用Vue的模板框架 我只是把 ...

  8. [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse

    Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...

  9. [Swift]LeetCode794. 有效的井字游戏 | Valid Tic-Tac-Toe State

    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...

  10. Linux 设置自启动服务

     0 为停机,机器关闭.(千万不要把initdefault设置为0 )    1 为单用户模式,就像Win9x下的安全模式类似.    2 为多用户模式,但是没有NFS支持.    3 为完整的多用户 ...