教学课件-java数组.ppt

上传人:牧羊曲112 文档编号:6575861 上传时间:2023-11-14 格式:PPT 页数:50 大小:473KB
返回 下载 相关 举报
教学课件-java数组.ppt_第1页
第1页 / 共50页
教学课件-java数组.ppt_第2页
第2页 / 共50页
教学课件-java数组.ppt_第3页
第3页 / 共50页
教学课件-java数组.ppt_第4页
第4页 / 共50页
教学课件-java数组.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《教学课件-java数组.ppt》由会员分享,可在线阅读,更多相关《教学课件-java数组.ppt(50页珍藏版)》请在三一办公上搜索。

1、数组,内容提要,什么是数组,数组是具有相同数据类型的一组数据的集合,它是由类型相同的元素组成的有顺序的数据集合,每个数据称为一个数组元素。例如,50个学生的期末总成绩,一个矩阵中的所有数据等等。Java语句提供了数组来保存和处理这类数据。例如:如果上述50个学生的期末总成绩构成一个数组,则每个学生的成绩叫数组元素;如果某个矩阵中的数据构成一个数组,则其中的每个数字叫数组元素。有了数组,就可以用同一个变量名来表示一系列的数据,并用下标来表示同一数组中的不同数组元素。每个元素都具有一个下标值,也就是该元素在数组中的位置。在Java语言中数组元素可以是简单数据类型,也可以是对象数据类型。,什么是数组

2、,数组的主要特点有5个:(1)数组是相同数据类型元素的集合。(2)数组中的各个元素在内存中按照先后顺序连续存放在一起。(3)每个数组元素用其所在数组的名字和其在数组中的顺序位置表示。例如base0代表变量名为base的数组中的第一个元素,base1代表数组base的第二个元素,依此类推,basen代表数组base的第n+1个元素。(4)数组的下标值是从0开始的,其可以是int类型的数据、变量和算术表达式。例如,base a、s 5*10 都是合法的下标值。(5)每个数组都有长度,也就是其所能含有元素的个数。,什么是数组,根据数据类型的不同可以把数组分为:基本数据类型数组和对象型数组。数组根据下

3、标是一个还是多个,分为一维数组、二维数组、三维数组以及多维数组。数组的作用在于提供了一种用来处理一组同类型数据的存储和访问机制,因为在实际编程中,你无法为每一个这样的数据声明一个变量。在Java语言中,数组元素可以是基本类型,也可是对象。实际上,Java认为数组本身也是一个对象,即虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。,数组的应用,main方法的字符串数组参数,对象数组,数组作为方法的参数与方法的返回值,数组在排序中的应用,内容提要,一维数组,只有一个下标的数组称为一维数组。一维数组的定义:一维数组的定义分为声明数组和为数组分配内存空间两步。第一步:声明数组:语法格式

4、为:type arrayName;或 type arrayName;/建议采用该形式,更容易被理解为该类型的数组 说明:type包括基本数据类型和对象数据类型。arrayName是数组名,数组名称必须符合Java标识符的命名规则。在里面不能有任何内容。例如:int results;/声明了一个整型数组,数组名为resultsboolean info;/声明了一个逻辑型数组,数组名为infodouble b;/声明了一个双精度浮点型数组,数组名为b与其他高级语言不同,Java在数组声明时并不为数组分配存储空间,因此,在声明的中不能指出数组中元素的个数(数组长度),而且对于如上声明的数组是不能访问

5、它的任何元素的,必须经过初始化、分配存储空间创建数组后,才能访问数组的元素。当仅有数组声明,而未分配存储空间时,只是告诉系统一个新的数组的名称和类型,数组变量中只是一个值为null的空引用(指针)。,一维数组,一维数组定义第二步:为数组分配内存空间。使用关键字new来指定数组的长度,并分配相应的内存空间,语法格式为:arrayName=new typearraysize;说明:new是为数组分配内存使用的关键字。arraysize是数组的大小,即数组包含多少个元素。数组的大小一旦指定,就不可更改。例如:results=new int10;/数组results包含10个元素 通常也可以将声明与分

6、配内存空间合成一条语句。例如:int results=new int10;和 C 语言不同,Java 允许使用 int 型变量指定数组的大小。例如:int size=30;double number=new doublesize;一维数组在声明的时候,里面是什么都不能有的,但是在使用new运算符进行构造的时候,必须指明数组的长度,只有这样系统才能知道应该给这个数组分配多少内存。,一维数组,2.一维数组的初始化 当一个数组用new关键字为数组分配内存后,系统自动用数据类型的缺省值初始化所有的数组元素。下表给出了一维数组缺省初始化值。但是在实际应用中通常不使用系统的数组默认值,而是重新给数组赋初值

7、。,一维数组,重新给数组赋初值有以下几种方法:(1)按照顺序依次给每个元素赋值。例如给数组results赋值:results0=81;results1=92;results9=45;(2)在定义数组的同时直接给数组赋初值,初值的个数是数组的长度。初值必须用大括号括起来,用逗号分隔开,例如:int results=87,90,77,55,98,37,64,100;/数组有8个元素 注意:在使用第2种方法时,一定要注意定义和初始化要在一条语句中完成,也就是说不可以定义数组后,在另一条语句中再给数组赋初值。例如:int results;results=87,90,77,55,98,37,64,100

8、;这是错误的语句。只能写成:int results=87,90,77,55,98,37,64,100;或者 int results=new int 87,90,77,55,98,37,64,100;,一维数组,通过循环给一维数组赋值。如:给results数组的10个元素依次赋值为1,2,3,10。for(int i=0;iresults.length;i+)resultsi=i+1;,一维数组,3.一维数组元素的引用:定义并初始化完一个数组后,就可以访问(引用)数组中的各个元素了。一维数组元素的引用格式如下:数组名下标 说明:使用下标来标识数组中特定位置的元素,下标可以是整型常数或表达式。下标

9、是int类型的,也可以是byte、short、char等类型,但不允许为long类型。下标值由0开始到数组长度减1为止。如:a3,bi(i为整型),c6*I等 数组是一个对象,每个数组对象都有length属性,表示数组的长度,用来记录数组中元素的个数。表示一维数组长度的格式:数组名.length。如果使用没有初始化的数组,系统会产生NullPointException异常,提示用户数组没有初始化。数组创建后,系统自动为数组元素赋初值。Java对数组元素要进行越界检查以保证安全性。若数组元素下标小于0、大于或等于数组长度将产生下面的异常:ArrayIndexOutOfBoundsExceptio

10、n以int results=87,90,77,55,98,37,64,100 为例results0表示数组中的第一个元素;results7表示数组中的最后一个元素。,一维数组,4.一维数组的输出一般用for循环输出,如:int a=5,7,9,10,12,32,25,55,65,4;for(int i=0;ia.length;i+)System.out.print(ai+“);,15,课堂练习,下面哪一个语句是有效的数组声明?int i=new int(30);double d=new double30;int i=(3,4,5,7);char c=new char();float f=1.0

11、f,1.5f,4.6f;double d=new float30;,16,课堂练习,说出下面数组第3个元素的值。int a=1,3,6,7,8;boolean b=new boolean10;float f=1.4f,5.6f,7.0f,2.5f,3.6f;double d=new double10;long L;,一维数组-例1,数组经常和循环结构语句一同使用,以达到赋值,处理,输出的目的。例如:定义一个一维数组d,重新给数组赋初值,最后输出数组长度以及数组的每一个元素值。public class array1 public static void main(String args)int

12、d=new int 1,14,6,2,3,78,21,45,79,34;/通过枚举法创建了数组对象,该数组有10个元素值 for(int i=0;id.length;i+)/for循环,逐个对数组元素引用,输出 数组元素值 System.out.print(di+);/输出每个数组元素();/换行 System.out.println(d.length=+d.length);/输出数组长度 程序运行结果:,一维数组-例2,将Fibonacci数列的前15个数存入一维数组a中,并顺序输出这15个数。斐波那契数列如下:0、1、1、2、3、5、8、13、(即从第三项起每一项是前两项的和)。publi

13、c class FibArray public static void main(String args)int i;int a=new int 15;a0=0;a1=1;for(i=2;i 15;i+)ai=ai-1+ai-2;for(i=0;i 15;i+)System.out.print(ai+“”);,一维数组在排序中的应用,排序是计算机程序设计中的一项重要操作。排序就是把一组记录按照其中的某个或某些关键字的大小递增或递减排列起来的操作。在排序过程中通常进行两种操作:一是比较两个关键字的大小;二是把记录从一个位置移动到另外一个位置。排序算法按照是否涉及数据的内外存交换分为:内排序算法。

14、内排序算法是待排序的记录个数比较少,整个排序过程中所有的记录都可以直接存放在内存中。外排序算法。外排序算法是待排序的记录数量很大,内存无法容纳所有记录,排序过程中还需要访问外存。详细的排序算法分类图如图所示。,直接选择排序算法,直接选择排序的基本思想:直接选择排序属于选择排序的一种。假设记录为一组数据,将数据进行升序即从小到大的顺序排列,下面介绍直接选择排序算法的基本思想。降序排列与此相同。1)首先在待排序的数中选择最小的数,将它放在第一个位置,也就是将该数与第一个数进行位置交换;2)然后从剩下的数中选择最小的数放在第二个位置;也就是将该数与第二个数进行位置交换;3)如此继续.4)直到最后从剩

15、下的两个数中选择最小的数放在倒数第二个位置,最后一个数放在最后一个位置,完成排序。,如何找出一组数中的最小值?“打擂台”法,在直接选择排序算法中有一项工作就是找出一组数中的最小值(最大值),如何操作可以类比现实世界的“打擂台”。因此把这种找出一组数据中的最小值(最大值)算法形象地称为“打擂台”法。假设要找出8个数中的最小数,步骤如下:1)先将第一个数送上“擂台”;2)其余7个数依次和“擂主”进行比较,比第一个数小的就站在“擂台”上;3)最终站在台上的就是8个数中的最小值。,直接选择排序算法的应用,给出一组数据45,34,78,12,34,32,29,64,用直接选择排序算法进行升序排列。步骤如

16、下:第一步:用“打擂台”法找出原始序列中的最小数即12,放在第一个位置,也就是将12与第一个位置上的45进行位置交换;第二步:继续用“打擂台”法在剩余的数中找出最小的数即29,放在第二个位置,也就是将29与第二个位置上的34进行位置交换;第三步:如此继续.,最终完成排序。具体过程如图所示。,用Java语言实现的直接选择排序算法,首先考虑8个数据应该存放在哪?定义8个变量可以存放,但是如果是80个数呢?所以要用数组这种数据结构来存放这8个数据。,用Java语言实现的直接选择排序算法,public class SelectionSort/定义主类 public static void main(S

17、tringargs)/主函数 int a=45,34,78,12,34,32,29,64;/定义数组 int temp;/temp是交换时用到的中间变量(排序前:);for(int i=0;ia.length;i+)/输出排序前的原始数列 System.out.print(ai+);();for(int i=0;ia.length-1;i+)/n-1趟排序 int p=i;/p代表位置,for(int j=i;ja.length;j+)/在当次排序中选择最小值 if(ajap)p=j;temp=ai;/ai与ap 交换位置 ai=ap;ap=temp;(排序后:);for(int i=0;ia

18、.length;i+)/输出排序后的数列 System.out.print(ai+);,一维数组作业,分别定义一个int型一维数组、一个char型一维数组、一个float型一维数组和一个String型一维数组,元素个数均为10,4个数组均不用赋值,分别输出各个数组的第六个元素。定义一个整型数组int a,大小为10。数组元素的值为1,210。逆序输出数组元素值,即10,9,81输出。定义一个数组a:int a=8,25,17,36,13,2,89,45;求该数组的最大值、最小值和平均值。将下列数据用直接选择排序降序排列。4,32,14,0,25,32,9,11,55,41,内容提要,二维数组,

19、带有两个下标的数组称为二维数组。如果一个一维数组,它的每个元素又都是一个一维数组,就构成了一个二维数组。二维数组可以看作一个按照行和列存储数据的内存空间。二维数组视为由行和列组成,即数学概念“矩阵”。使用二维数组可方便地处理表格形式的数据。,二维数组,二维数组的定义:分为声明数组和为数组分配内存空间两步。第一步:声明数组:语法格式为:type arrayName;或 type arrayName;说明:type包括基本数据类型和对象数据类型。arrayName是数组名,数组名称必须符合Java语言标识符命名规则。在里面不能有任何内容。例如:int a;/声明了一个二维数组,数组名为a 或 in

20、t a;与一维数组一样,这时对数组元素也没有分配内存空间,同样使用运算符new来分配内存,然后才可以访问每个元素。,二维数组,二维数组定义的第二步:为数组分配内存空间。二维数组分为规则的二维数组和不规则的二维数组。规则的二维数组:每一行的元素个数是相同的。语法格式为:数组名称=new数组元素类型行数列数;例如:a=new int46;这是正确的方法,4行6列的数组,数组每行、每列之间长度相同,总共有24个元素。,二维数组,不规则的二维数组:每一行的元素个数是不相同的。语法格式为:数组名称=new数组元素类型行数;例如:a=new int2;/数组有2行.最高维必须指定长度,其余低维可不指 定长

21、度。数组每行、每列之间长度不相同。a 0=new int3;/表示该数组的第一行有3列,也就是3个元素。a 1=new int5;/表示该数组的第二行有5列,也就是5个元素。a=new int3;/错误,不允许最高维不指定长度而其余低维指定长度 例如,下面这个不规则的二维数组:int twoDim=new int4;twoDim0=new int 2;twoDim1=new int 4;twoDim2=new int 6;twoDim3=new int 8;,二维数组,通常也可以将声明数组与分配内存空间合成一条语句,例如:int array2=new int23;/规则 int array2=

22、new int2;/不规则 array2 0=new int3;array2 1=new int5;,二维数组,2二维数组的初始化:与初始化一维数组类似,初始化二维数组也有以下几种方法。(1)按照顺序依次给每个元素赋值。例如给数组array2赋值:intarray2;/声明数组array2array2=new int23;/给数组array2分配内存空间,2行3列,共6个元素array2 00=67;/第1个元素值为67array2 01=97;/第2个元素值为97array2 02=100;/第3个元素值为100array2 10=89;/第4个元素值为89array2 11=73;/第5个

23、元素值为73array2 12=65;/第6个元素值为65,二维数组,二维数组初始化:(2)在定义数组的同时直接给数组赋初值。例如:int results=84,77,100,98,63,65;/该数组也是2行3列。整个初值数据用大括号括起来,其中的每一行初值也必须用大括号括起来,用逗号分隔开。内层大括号内的数值也要用逗号分隔开。或者:int results=new int 84,77,100,98,63,65;,二维数组,二维数组的长度是指行数的个数,二维数组每行的长度是指每行的元素个数。例如:results.length表示二维数组results的长度,也就是行数;results i.le

24、ngth表示二维数组results第i+1行的长度,也就是该行元素个数。,二维数组,通过双重循环给二维数组赋值,通常选择for循环。例如:int a=new int23;for(int i=0;ia.length;i+)for(int j=0;jai.length;j+)aij=i+j;对于不规则的二维数组也是如此赋值!,二维数组,3.二维数组的引用:对二维数组初始化完以后,就可以访问(引用)数组中的各个元素了。二维数组元素的引用格式如下:数组名行下标列下标其中,行下标和列下标可以是整型常数或表达式。下标是int类型的,也可以是byte、short、char等类型,但不允许为long类型。如c

25、23等。同样,每一维的下标都从0开始。,二维数组,4.二维数组的输出一般用双重的for循环输出,如:int a=1,0,3,-1,2,1,0,2;/2行4列 for(int i=0;ia.length;i+)for(int j=0;jai.length;j+)System.out.print(aij+);();,二维数组-例1,例:定义两个二维数组,输出每个数组的元素以及数组长度 public class array2 public static void main(String args)int a=1,0,3,-1,2,1,0,2;/2行4列 int b=7,4,-1,1,2,0,1,1,

26、2,3,4;/4行,每一行的元素个数不相同。第1行2个元素,第2行3个元素,第3行4个元素(*数组a*);for(int i=0;ia.length;i+)for(int j=0;jai.length;j+)System.out.print(aij+);();System.out.println(a的长度是:+a.length);();(*数组b*);for(int i=0;ib.length;i+)for(int j=0;jbi.length;j+)System.out.print(bij+);();System.out.println(b的长度是:+b.length);,二维数组:例2,矩

27、阵转置。矩阵是排列成若干行若干列的数据表,转置是将数据表的行列互换。即第一行变成第一列、第二行变成第二列等等。public class Matrixt public static void main(String args)int a=1,2,3,4,5,6,7,8,9,10,11,12;/3行4列 int b=new int 43;/4行3列 for(int i=0;i a.length;i+)for(int j=0;j ai.length;j+)System.out.print(aij+);();(*);for(int i=0;i b.length;i+)for(int j=0;jbi.l

28、ength;j+)bij=aji;System.out.print(bij+);();,41,二维数组课堂练习,声明并创建一个如下数组。包含3行,每行分别包含不同数目元素,元素数依次为 5,4,6 编写一个程序,逐个输出该数组的每个元素的默认初始值。,二维数组作业,创建一个字符型二维数组,并根据执行结果为各元素赋值,然后输出各元素。2.定义2个二维数组 a,b,分别都是4行4的整型数据,将2个数组相加,结果放入数组c中,2个数组相减,结果放入数组d中,分别输出数组a,b,c,d。,二维数组作业,4.杨辉三角是中国古代著名的数学问题,其10几行的内容如下图所示:按上面的格式输出杨辉三角前10行的

29、内容。(提示:通过观察,不难发现,杨辉三角每一行中左右边界元素值均为1,而非边界元素的值等于其上一行对应位置元素值与上一行对应位置左邻元素值之和),内容提要,for-each,for-each 是jdk1.5新增加的功能,提供一种更简洁的语句遍历数组和集合(Collection)的方法。在Java程序中,要“逐一处理”或者说“遍历”某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现。形式为:for(循环变量数据类型 变量名:被遍历的对象名)循环体 说明:被遍历的对象名必须是一个数组或者是集合。循环变量数据类型要与被遍历的对象元素的数据类型是一致的。变量名符合java

30、标识符命名规则。,for-each,1.对于遍历数组传统方式如下:int integers=1,2,3,4;/建立一个数组 for(int j=0;jintegers.length;j+)/开始遍历 System.out.println(integersj);2.借助for each这种语法,遍历一个数组的操作就可以采取这样的写法:int integers=1,2,3,4;/建立一个数组 for(int i:integers)/开始遍历 System.out.println(i);/依次输出“1”、“2”、“3”、“4”,for-each,for each输出二维数组测试 int arr2=4

31、,3,1,2;System.out.println(“foreach输出二维数组测试”);for(int x:arr2)for(int e:x)System.out.println(e);/逐个输出数组元素的值();,for-each,使用for each循环输出二维数组 char itzhai=a,b,a,b,a,a,b,b,b,b,a,a;for(char it1:itzhai)for(char it2:it1)System.out.print(it2+);();,for-each,for each语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用for each的地方就不要再用for了。在用到对集合或者数组索引(下标)的情况下,for each显得力不从心,这个时候是用for语句的时候了。for each一般结合泛型使用。,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号