第5章数组
什么是数组?数组在实际程序中起到什么作用?数组用来存储数据,类似数据的缓存,是一组有序列的数据集合。通过本章的学习,可以了解数组如何进行数据存储,并且结合编程实例,掌握数组的设计和操作。
5.1数组概念的引入
本节将介绍数组的一些基本概念。这些概念有助于在以后的编程过程中,更好的使用数组。
5.1.1实例的引入
走进一家运动器材店,会看到很多的体育运动器材,有篮球、排球、足球、羽毛球、乒乓球、高尔夫、滑板、健身器材等等。如果要为这家店作一个数据库系统,首先要建立一个类似于集合的表格,如下所示。
{篮球,排球,足球,羽毛球,乒乓球,高尔夫,滑板,健身器材}
在程序开发中,将这种集合形式经过改装,变成了本章要重点讲述的数组,将上述的例子用数组来表示:
运动器材{篮球,排球,足球,羽毛球,乒乓球,高尔夫,滑板,健身器材}
5.1.2数组的概念
数组是具有相同数据类型的数据的集合,例如上一小节中提到的运动器材集合。相同的数据类型,意味着数组中每个数据都是同一类型数据,或者属于基本数据类型中相同类型的数据,或者属于对象类型中相同类型的数据。在生活中,一个班级的学生、一个学校的所有人、一个汽车厂的所有汽车等等,这些都可以形成一个数组。
数组如果按照维数来分,分为一维数组、二维数组、三维数组和多维数组等,每一维代表一个空间的数据。一维数组代表的就是一维空间的数据,例如自然数从1~10。
{1,2,3,4,5,6,7,8,9,10}
二维数组代表的就是二维空间的数据,例如在数学中的坐标。
{(1,2),(3,4),(5,6),(7,8)}
这里的每一组数据都代表了二维空间中的x和y的坐标值。
三位数组代表的就是三维空间的数据,所谓三维空间就是指立体空间,例如立体坐标。
{(1,2,3),(2,3,4),(3,4,5),(4,5,6),(5,6,7)}
这里的每一组数据都代表了三维空间中的(x,y,z)轴的坐标值。
5.1.3用实例说明数组的用处
本节重点是说明数组的优点,可能会遇到后面小节讲述的内容,先不要理会。下面来看
一个有关数组的简单实例。
一个班上有10个同学,分别是王垒、赵敏、宋江、刘户、孙洁、王浩、周杰、钱平、
朱汉、马超。前面5个同学是男生,后面5个同学是女生。下面分析如何用数组来表示。
这个实例用数组来表示的方式有很多种,可以用一维数组来表示,也可以用二维数组来
表示,还可以用三维数组来表示。下面先使用一维数组来表示。
某个班级的同学〔10〕{王垒,赵敏,宋江,刘户,孙洁,王浩,周杰,钱平,朱汉,马超}
“某个班级的同学”是这些同学的共同点,在程序中可以称之为相同的数据类型,中括
号中的数组代表的是共有几个相同数据类型的数据,而大括号内的数据就是要使用的数据。
如果使用二维数组来表示,请看下面示例。
某个班级的同学〔10〕{(王垒,男),(赵敏,男),(宋江,男),(刘户,男),(孙洁,男),(王浩,女),(周杰,女),(钱平,女),(朱汉,女),(马超,女)}
此时在二维数组中,将性别和姓名作为二维数组的一个数据元素
如果使用三维数组来表示,请看下面示例。
某个班级的同学〔〕{(王垒,男,21),(赵敏,男,21),(宋江,男,21),(刘户,男,21),
(孙洁,男,21),(王浩,女,21),(周杰,女,21),(钱平,女,21),(朱汉,女,21),
(马超,女,21)}
此时在三维数组中,将姓名、性别和年龄作为三维数组中的一个数据元素。
5.2基本数据类型的数组
上面一节中使用实例对数组的用处作了分析,此节将针对基本数据类型的数组,讲述其
声明方法和使用方法。本节将会利用大量编程实例,来加强对数组用法的理解。
5.2.1基本类型数组的声明
使用一个数据时,必须要对其进行声明,这个道理对于数组来说也一样,数组在使用之
前也必须先声明。先看下面的代码,是如何声明一个变量的。
Int a;
仔细分析一下:int是指变量的数据类型,a是指变量名,由变量的声明可以联系到数组
的声明。
Int a[];
仔细分析一下:int是指数组中所有数据的数据类型,也可以说是这个数组的数据类型,
a[]表示数组名。
基本类型数组的声明有几种形式:
int a[];
int[]a;
这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择。
5.2.2基本类型数组的初始化
如何对基本类型的数组进行初始化呢?同样,可以先从变量的初始化开始。一个变量的
初始化工作,其实就是一个变量的赋值工作,例如下面的变量初始化实例。
int a=3;
以上就是一个变量初始化的例子,那么数组的初始化是什么样子?下面看一个有关数组
初始化的实例。
Int[]a=new int{1,2,3,4,5};
要用关键字“new”,是因为数组本来就是一个对象类型的数据。
数组的长度其实就是指数组中有几个数据,举个数组长度的例子。
int[]a={1,2,3,4,5};这个数组的长度就是里面有几个数据,这个数组里有5个数据,说明这个数组长度是5;
在编写程序的过程中,如果要引用数组的长度,一般是使用变量“length”,在程序中
一般是使用下列格式:
数组名.length
介绍了以上那么多内容,下面先看一个基本类型数组的例子。
创建一个拥有10个元素的整数型数组a,并通过a[i]=i*i为每个数组元素赋值,最后将结果输出。
///对a这个数组赋值
///将数组a中的所有元素输出
public class arrary1
{
public static void main(String[]args)
{
int[]a;
a=new int[10];
int i;
for(i=0;i<10;i++)
{
System.out.println("a[i]="+(i*i));
}
}
}
2012款奥迪a3
运行结果
a[0]=0
a[1]=1
a[2]=4
a[3]=9
a[4]=16
a[5]=25
a[6]=36
a[7]=49
a[8]=64
a[9]=81
程序先作了个数组声明“int[]a”,然后,创建了一个数组对象“a=new int[10]”,最
后使用循环语句输出数组中所有数据。
数组是对象类型数据。基本类型的数组,是指这个数组中数据的数据类型,与数组是否
是对象类型数据是毫无关系。
5.3由实例引出不同数组种类及其使用
本节主要使用实例让读者能更加熟悉数组的使用。通过本节的学习,总结一些编程中所使用的编程思路。编程最重要的不是如何编写代码,使用哪种控制流程?最主要的是编程的思路,编程思路决定着这个程序代码的好与坏。
5.3.1由实例引出一维数组及其使用
先来看一个很简单的实例。有两个数组a[]、b[],输出它们中的各个数据,并且输出它们的长度。
///初始化两个数组a、b
///使用循环语句将两个数组内元素输出
///并且使用length属性输出数组的长度
public class arrary2
{
public static void main(String[]args)
{
int[]a=new int[]{1,2,3,4,5};
int[]b=new int[]{2,3,4,5,6,7,8};
for(int i=0;i<a.length;i++)
{
System.out.println("a["+i+"]="+a[i]);
}
for(int j=0;j<b.length;j++)
{
System.out.println("b["+j+"]="+b[j]);
}
System.out.println("a数组的长度是:"+a.length);
System.out.println("b数组的长度是:"+b.length);
}
}运行结果
a[0]=1
a[1]=2
a[3]=3
a[3]=4
a[4]=5
b[0]=2
b[1]=3
b[2]=4
b[3]=5
b[4]=6
b[5]=7
b[6]=8
a数组的长度是:5
b数组的长度是:7
这个程序段主要是将两个数组中的每个数据和整个数组的长度输出,而这个例子也是数组最简单的实例,下面再看一个稍微复杂的实例。
有两个数组a[]、b[]。将两个数组中数据一一对应相乘,得出数组c,输出数组c和数
组的长度。
///初始化两个数组a、b
///将两个数组中对应的元素相乘得出第三个数组的元素
///输出三个数组的长度
public class arrary3
{
public static void main(String[]args)
{
int[]a=new int[]{1,2,3,4,5};
int[]b=new int[]{2,3,4,5,6};
for(int i=0;i<a.length;i++)
{
System.out.println("c["+i+"]="+(a[i]*b[i]));
}
System.out.println("a数组的长度是:"+a.length);
System.out.println("b数组的长度是:"+b.length);
System.out.println("c数组的长度是:"+b.length);
打车软件排行榜前十名}
}运行结果
c[]=2
c[]=6
c[]=12
c[]=20
c[]=30
a数组的长度是:5
a数组的长度是:5
a数组的长度是:5
这段程序可以学习如何操作数组内各个元素,下面再看看更加复杂的程序段。
创建一个整数型数组f,它拥有20个元素,并将它的各个元素赋值如下,然后,输出它们。其函数关系如下所示:
f[0]=1;f[1]=2;f[i]=f[i-1]+f[i-2];
///条件中的是一个递归函数
///通过一个循环语句将数组中所有的元素输出
public class arrary4
{
public static void main(String[]args)
汽车压力传感器
{
int[]f=new int[20];
f[0]=0;
f[1]=2;
for(int i=2;i<f.length;i++)
{
f[i]=f[i-1]+f[i-2];
System.out.println("f["+i+"]="+f[i]);
}
}
}
运行结果
f[2]=2
f[3]=4
f[4]=6
f[5]=10
f[6]=16
f[7]=26
f[8]=42
f[9]=68
f[10]=110
f[11]=178
f[12]=288
f[13]=466
f[14]=754
f[15]=1220
f[16]=1974
f[17]=3194
f[18]=5168
f[19]=8362
这个程序段是数学中的一个递归函数,其中的运算过程,交给了循环语句去处理。上面所有的程序段,都是围绕着如何操作一维数组内的元素,其实一维数组在实际程序中的一些应用,不过是操作数组内部元素而已。
5.3.2由实例引出二维数组及其使用
针对二维数组,先看看下面的有关二维数组的例子:创建一个字符型二维数组,并根据执行结果为各元素赋值,然后输出各元素。
///使用两个数组分别代表空间中的x和y轴
///通过循环语句将对应的每一个坐标上的元素输出
public class arrary5
{
public static void main(String[]args)
{
char[][]a;
a=new char[4][10];
a[0]=new char[10];
a[1]=new char[10];
zenvo st1
a[2]=new char[10];
a[3]=new char[10];
a[i][j+1]=(a[i][j]);
a[0][0]=65;汽车点评
a[1][0]=67;
a[2][0]=69;
a[3][0]=71;
三菱菱帅for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
运行结果