收藏 分享(赏)

浙江大学Java程序设计课程PPT第五章.ppt

上传人:weiwoduzun 文档编号:3870037 上传时间:2018-11-23 格式:PPT 页数:49 大小:284.04KB
下载 相关 举报
浙江大学Java程序设计课程PPT第五章.ppt_第1页
第1页 / 共49页
浙江大学Java程序设计课程PPT第五章.ppt_第2页
第2页 / 共49页
浙江大学Java程序设计课程PPT第五章.ppt_第3页
第3页 / 共49页
浙江大学Java程序设计课程PPT第五章.ppt_第4页
第4页 / 共49页
浙江大学Java程序设计课程PPT第五章.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、第五章 数组,5.1 一维数组 5.2 多维数组 5.3 数组的基本操作 5.4 数组应用举例 5.5 数组参数 5.6 字符串,Introduction,数组,Array(阵列) 变量:存储单个数据数组:存储多个数据 具有相同性质的一批数据 Java 数组:用一个变量表示一组相同类型的数据,For Example,一组n个学生的成绩数据处理 输入 输出 排序 求最大 求平均值 判断不及格 统计分数段 给每一个学生的成绩数据设定一个变量? NO!,5.1 一维数组,数组 一个变量名表示一组数据,每个数据称为数组元素 每个元素通过下标来区分 一维数组 以一个下标确定数组中的不同元素 多维数组 多

2、个下标表示一个数组元素 数组必须先经过申明和初始化后才能使用 数组申明:确定数组名、数组的维数和数组元素的数据类型,一维数组的声明,一维数组声明的格式 类型标识符 数组名或 类型标识符 数组名 例:表示学生的成绩(整数),可以声明数组score:int score ; 表示体重的数组类型为float的weight,声明:float weight; Note:方括号可以在变量名的后面,也可以在类型名后面,一维数组的初始化,数组初始化 系统为数组分配存储空间,确定数组元素的个数 用 new 初始化数组数组名= new 类型标识符元素个数 先声明数组再初始化int sc ;sc=new int10;

3、float weight;weight=new float50,数组元素通过下标来区分下标最小值为0下标最大值为元素个数减1各元素的存储空间是连续的,一维数组初始化,在声明的同时进行初始化 即将前述的声明语句、new语句合并为一条语句: 类型标识符 数组名=new 类型标识符元素个数或 类型标识符 数组名=new 类型标识符元素个数 例如:int sc =new int10;float weight=new float50 初始化数组后,通过数组的length获取元素个数数组.length 例如:n=sc.length; /n=10m=weigth.length; /m=50,赋初值初始化数组

4、,可以在声明数组的同时,给数组元素赋初值 所赋初值的个数决定数组元素的数目 其格式如下:类型标识符 数组名 = 初值表 初值表是用逗号隔开的初始值,例如:int score=65,34,78,81,56,92,56,87,90,77;,score0,score9,使用数组的好处,减少程序中的变量数量 统一的数组名,易于理解 对数据元素的操作可以使用循环语句 一维数组元素的赋值和输出都可以通过单重循环语句完成 【例补5-10】输入10个学生的成绩,统计最高分,平均分、不及格人数及高于平均分的人数,定义数组sc10用于存放10个学生成绩 利用循环语句输入成绩并统计,5.2 多维数组,二维数组的声明

5、 二维数组经常表示一个矩阵 二维数组的声明方式与一维数组类似,只是要给出两对方括号。二维数组声明形式如下:类型标识符 数组名 或类型标识符 数组名 例如:int a; / 第一个叫做行,第二个叫做列,二维数组的初始化,先声明数组再初始化 用new初始化二维数组数组名= new 类型标识符行数列数 例如:int a;a=new int34; 声明同时初始化类型标识符 数组名=new 类型标识符行数列数 或类型标识符 数组名=new 类型标识符行数列数 例如:int a=new int34;,int a=new int34; 数组中各元素通过两个下标来区分 每个下标的最小值为0,最大值分别比行数或

6、列数少1。 系统为该数组a的12个元素分配存储空间,形式如表所示:,行,列,二维数组的初始化,初始化后,通过属性length获取行数和列数 获取数组行数:数组名.length 例:a.length /值为3 获取数组列数:数组名行标.length 例:a0.length /值为3,int a=new int34; Java中,二维数组作为一维数组来处理 A可看作一维数组,有3个元素a0、a1、a2 每个元素本身是一维数组,例:,二维数组的初始化,在初始化时,可以各行单独进行,允许各行元素不同、int c=new int3; /c为3行二维数组c0=new int1; /c0具有1个元素c1=n

7、ew int3; /c1具有3个元素c2=new int5; /c2具有5个元素,a00 、a01、a02、a03,赋初值初始化二维数组,类型标识符 数组名=初值表0,初值表1,初值表n;例:int gd=65,34,78,81,56,92,56,87,90, 92, 69, 75;,/gd共有12个元素,元素gd00,gd01,gd02,gd10 , gd32的初始值分别为65,34,78,75,如表所示,注意:二维数组元素的赋值和输出可以通过双重循环语句完成,5.3 数组的基本操作,数组的引用 对数组的应用通常是对其元素的引用 数组元素可以被赋值、被输出或参加表达式运算int age=ne

8、w int3;age0=25;age2=2+age0 ; 数组的复制 可以通过循环语句 也可以直接将一个数组赋值给另一数组int a=new int6; /将b数组的各元素值赋值a数组的相应元素int b=1,2,3,4,5,6;for(int i=0;i6;i+) ai=bi;或 a=b;,Demo1,int c,d, e,i, j; c=new int33; d=new int33; e=new int33; for(i=0;i3; i+)for (j=0; j3; j+) dij=i+j;cij=dij; e=d;,c、d、e数组各元素 0 1 2 1 2 3 2 3 4,数组的基本操作

9、,数组的输出 数组输出通常是逐个元素结合循环语句实现int a=new int6; for(int i=0;i6;i+) ai=i;System.out.print(ai+” ”);,输出: 0 1 2 3 4 5,例【5-2】一维数组的复制,class ArrayC public static void main(String args) int a,b, i, j; a=new int3;b=new int5; System.out.println(“a.length=“+a.length);for ( i=0; ia.length; i+) ai=i; System.out.print(

10、ai+“ “);System.out.println(); /作用?(接下页),System.out.println(“Before array assignment“);System.out.println(“b.length=“+b.length);for (j=0; jb.length; j+)bj=j*10;System.out.print(bj+“ “); System.out.println();b=a; / 注意,数组a、b长度不一样System.out.println(“After array assignment“);System.out.println(“b.length=

11、“+b.length);for (j=0; jb.length; j+)System.out.print(bj+“ “);System.out.println(); ,a.length=3 0 1 2 Before array assignment b.length=5 0 10 20 30 40 After array assignment b.length=3 0 1 2,int c,d,i, j; c=new int22;d=new int33;System.out.println(“Array d:“);for(i=0;id.length; i+) for (j=0; jdi.leng

12、th; j+) dij=i+j;System.out.print(dij+“ “); System.out.println(); c=d;System.out.println(“Array c:“);for(i=0;ic.length; i+)for (j=0; jci.length; j+)System.out.print(cij+“ “); System.out.println();,例【5-3】二维数组的复制,程序运行结果如下: Array d 0 1 2 1 2 3 2 3 4 Array c 0 1 2 1 2 3 2 3 4,/外循环控制行,/内循环控制列,5.4 数组应用举例-排

13、序,【5-4】排序 排序是将一组数按照递增或递减的顺序排列 排序的方法很多,其中最基本的是选择法,基本思想: 先在n个数中选最小数,放在第1个数组元素中。 取第1个数,与后面n-1(即底2到第n)个数逐个比较。 若第1个数大,则与数组元素中的值进行互换,直到最后。 再在第2至第n个元素中,选最小数,放在第2个数组元素中。 取第2个数,与后面n-2(即3到n)个数逐个比较。 若第2个数大,则与数组元素中的值进行互换,直到最后。 重复以上步骤,直至在最后两个数中选取最小数,放在第n-1个数组元素中。最后第n个元素已是最大数了。,5.4 数组应用举例-排序,改进的选择法,基本思想: 对于给定的n个数

14、,找到最小数的位置,与第1个数交换最小数置于第1个位置(每一轮最多只做一次交换) 对于剩下的n-1个数,重复步骤1,将次小数置于第2个位置 对于剩下的n-2,n-3,最后2个数用同样的方法,分别将第3个最小数置于第3位置,第4个最小数置于第4位置,第n-1个最小数置于第n-1位置,最后第n个数已是最大数了。,若7,4,0,6,2,5,1(放在数组元数a中)从小到大排序: 1、7个数中,最小数是0,与第1个数7交换位置,结果为: 0 4 7 6 2 5 1 2、余下的6个数最小数是1,与第2个数4交换,结果为:0 1 7 6 2 5 4 3、剩下的5个数最小数是2,与第3个数7交换,结果为:0

15、1 2 6 7 5 4 4、剩下的4个数最小数是4,与第4个数6交换,结果为:0 1 2 4 7 5 6 5、剩下的3个数最小数是5,与第5个数7交换,结果为:0 1 2 4 5 7 6 6、剩下的2个数是6,与数7交换,结果为0 1 2 4 5 6 7,For Example,数组应用举例-排序,对n个待排序的数,要进行n-1轮的选择和交换过程 那么,在每轮中,如何确定最小数的位置? 思路:第i轮最小数的位置position的确定position=i;对于i后面的每个数aj若apositionaj,position=j 故第i轮的选择和交换过程中,要进行n-i次的比较,for(i=1;iaj

16、) p=j;temp=ai;ai=ap;ap=temp;,5.4 数组应用举例-排序,另一种排序法-冒泡法,基本思想: 从数组元素a(0)到a(n-1),将相邻的两个数两两进行比较(共比较n-1次),若前一个数大于后一个数,则进行对调。一趟操作后,a(n-1)已为最大数。 再从数组元素a(0)到a(n-2)作同样操作后,结果是a(n-2)成为次大数。 重复以上步骤,直至只剩a(0)和a(1)作比较,大的数放在a(1),剩下的a(0)自然是最小数了.。,数组应用举例-一维数组,【例补5-1】产生10个2位正整数,按从小到大排序,输入任一正整数,插入到原有数据序列中,保持从小到大次序不变,【例补5

17、-2】任意输入n个整数,再输入一个整数,查找该数在n个数中出现的位置和次数。,数组应用举例二维数组,【例补5-3】输出杨辉三角型(输出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 【例补5-4】求一个个位整数构成的5行5列方阵对角线上元素之积,解题: 定义一个10行10列的二维数组a1010 ai0=1;aii=1 aij=ai-1j-1+ai-1j,主对角线元素下标:

18、行号和列号相等,即i=j 副对角线元素下标:行号、列号之和等于4,即j=4-i,数组应用举例-矩阵运算,【例5-5】数学中的矩阵在Java中用二维数组实现,本例中要进行矩阵的加、乘运算。int c=1,2,3,4,5,6,7,8,9;int d=2,2,2,1,1,1,3,3,3; 求c+d,c*d ? 矩阵乘法运算 用数组c的第1行各个数与数组d的第1列各个数对应相乘后加起来,就是乘法结果中第1行第1列的数; 用数组c的第1行各个数与数组d的第2列各个数对应相乘后加起来,就是乘法结果中第1行第2列的数; 用数组c的第2行各个数与数组d的第1列各个数对应相乘后加起来,就是乘法结果中第2行第1列

19、的数; ,5.5 数组参数,在java的过程中,允许参数是数组。在使用数组参数时: 在形式参数表中,数组名后的括号不能省略,括号个数和数组的维数相等。不需给出数组元素的个数 在实际参数表中,数组名后不需括号,class ArrayC4 /例【5-6】计算数组元素平均值public static void main(String args) int c=1,2,3,4,5,6,7,8,9;int j;System.out.println(“ Array c“); for (j=0; jc.length; j+)System.out.print(cj+“ “); System.out.printl

20、n();System.out.println(“ Array average“); System.out.println( arrayAverage(c); / 调用数组 ,5.5 数组参数-DEMO,/ 通过“方法”计算数组元素的平均值,数组名作为形式参数 static float arrayAverage(int d) float average=0 ;for(int i=0;id.length; i+)average=average+di;average=average/d.length;return average; ,程序运行结果如下: Array c 1 2 3 4 5 6 7 8

21、 9 Array average 5.0,数组名做实际参数时,传递的是地址,而不是值 即形式参数和实际参数具有相同的存储单元。 形式参数值的改变将导致实际参数的值随之改变,5.5 数组参数-DEMO,例【5-7】展示数组参数传递地址的特性 class ArrayC6 public static void main(String args)int c=1,2,3,4,5,6,7,8,9,10;int i, j;System.out.println(“调用arrayMultiply之前的数组“);for (i=0; ic.length; i+) for(j=0; jci.length; j+)Sy

22、stem.out.print(cij+“ “); System.out.println();arrayMultiply(c); / 调用数组,System.out.println(“调用arrayMultiply之后的数组“);for (i=0; ic.length; i+) / What Do? for(j=0; jci.length; j+) System.out.print(cij+“ “); System.out.println(); static void arrayMultiply(int d) int k,l;for (k=0; kd.length; k+)for(l=0; ld

23、k.length; l+)dkl=2*dkl;System.out.println(“ In arrayMultiply“);for (k=0; kd.length; k+) for(l=0; ldk.length; l+)System.out.print(dkl+“ “); System.out.println(); / 方法arrayMultiply结束 / 程序结束,调用arrayMultiply前的数组 1 2 3 4 5 6 7 8 9 10In arrayMultiply 2 4 6 8 10 12 14 16 18 20调用arrayMultiply后的数组 2 4 6 8 10

24、 12 14 16 18 20,【例5-8】展示数组元素参数传递值的特性 class ArrayC7 public static void main(String args) int c=1,10,100,1000;int j;System.out.println(“数组在调用elementMultiply前“);for (j=0; jc.length; j+)System.out.print(cj+“ “); System.out.println();elementMultiply(c2);System.out.println(“数组在调用elementMultiply后“);,5.5 数组

25、参数-DEMO,for (j=0; jc.length; j+)System.out.print(cj+“ “); System.out.println(); / main 方法结束static void elementMultiply(int d) d=2*d;System.out.println(“d=“+d); / elementMultiply 方法结束 / 程序结束,该程序的运行结果如下: 数组在调用elementMultiply前 1 10 100 1000 d=200 /在elementMultiply中的输出 数组在调用elementMultiply后 1 10 100 100

26、0,数组做方法的参数时传递的是地址,但数组元素做参数时传递的是值。,字符数组与字符串 字符数组指数组的元素是字符类型的数据。 要表“China”,可以使用如下的字符数组: char country=C,h,i,n,a;System.out.println(country); /输出”Chian” 要表示长度为50的字符串,可以使用如下的字符数组:char title= new char50; 用字符数组表示字符串,使用不方便,Java提供String类,5.6 字符串,字符串变量的声明和初始化:String 变量名; /先申明再初始化变量名=new String();或 /申明的同时初始化St

27、ring 字符串变量 = new String(); 例如:String s=new String(); 字符串赋值 可以为字符串变量赋一个字符串常量, 也可以将一个字符串变量或表达式的值赋给字符串变量。 s1=“Chinese people“; s2=s1; / s2的值为“Chinese people” s3=“a lot of“+s2; / s3的值为“a lot of Chinese people” 运算符“+”的作用是将前后的两个字符串连接起来,字符串,最简单的创建字符串变量的方法String s1=“Chinese people“;或: String s1;s1=“Chinese

28、people“; 字符串的输出 字符串可以通过println()或print()语句输出例如,以下语句序列为字符串变量s赋值并输出其值: String s=“All the world“; System.out.println(s);,字符串,public class StringUse public static void main(String args)String s1, s2;s1=new String(“Students should “); s2=new String();s2=“study hard.“;System.out.print(s1);System.out.print

29、ln(s2);s2=“learn english, too“;System.out.print(s1);System.out.println(s2);s2=s1+s2;System.out.println(s2); ,【例5-9 】字符串应用,该程序的运行结果如下: Students should study hard. Students should learn english, too Students should learn english, too,字符串操作 String类用很多成员方法来对字符串进行操作。例:s=“I am a student.”Int length():返回字符

30、串的长度。s.length() /返回值15char charAt(int index):返回字符串中第index个字符s.charAt(7) /返回值s ,注意第1个字符序号0int indexOf(int ch):返回字符串中字符ch第1次出现的位置。s.indexOf(a) 或 s.indexOf(97) /返回值2s.indexOf(A) /返回值-1,没有指定的字符ch返回值为-1,字符串操作,例:s=“I am a student.” indexOf(String str, int index):返回在该字符中,从第index个位置开始,子字符串str第1次出现的位置。s.inde

31、xOf(“stu”,0) /返回值是7 s.indexOf(“stu”,9) /没有找到,返回值是-1substring (int index1, int index2):返回值是在该字符串中,从第index1个位置开始,到第index2-1个位置结束的子字符串。s.substring(7,13) /返回值是studens.substring(7) /返回值是student. 若省略index2,从第index1个位置开始,到结束的子字符串,字符串操作,例:s=“student“; boolean equals(Object obj):将字符串与obj所表示的字符串进行比较,如果两者相等,返回

32、值true,否则falses.equals(“Student”) /返回值false boolean equalsIgnoreCase(String str):将字符串与str所表示的字符串进行比较,但忽略大小写,如果两者相等,返回值true,否则falses.equalsIgnoreCase (“Student”) /返回值true,字符串操作,字符串操作,注意:=也能进行字符串是否相等的比较, 但=比较的是地址指针, 而equals比较的是实际内容. String s1=new String(“Hello“); String s2=new String(“Hello“); System.o

33、ut.println(s1=s2); /输出false System.out.println(s1.equals(s2); /输出true 当要比较2个字符串是否相等时,应用equals方法。,字符串操作,将int, long , float, double, boolean等基本类型数据转换为String类型的方法: String.valueOf(基本类型数据)将字符串型数据转换为其它基本类型的方法及实例,字符串与其它类型数据转换,字符串操作举例,【例补5-5】输入一字符串,判断是否回文,若一个字符串的逆序字符串和原字符串相等,则该字符串是回文 将字符串中的字符逐个取出 反向连接成一个新的字

34、符串 判断新、旧字符串是否相等,【例补5-6】输入一字符串,将字符串中的字符从小到大排序后输出新的字符串。如输入”student”,输出”densttu”,字符串操作举例,【例补5-8】将十六进制数转换成十进制数,【例补5-7】先输入一个字符ch,再输入一个字符串,在字符串中查找该字符(ch),如果找到,则输出 该字符在字符串中最后出现的位置,否则输出“Not Found”。,输入一个十六进制数字符串 逐个字符(存放变量 char ch)取出转换成int类型数据 如9 9 Integer.parseInt(“+ch) 如d 13 10+(ch-a) 乘以相应的位权再累加起来,输入字符ch: c

35、h=(in.nextLine().charAt(0); 利用String类的charAt()方法将字符串中的字符逐个取出与字符ch比较,进行查找。,字符串数组,要表示一组字符串可以用字符串数组来实现。String str=new String4; str0=“Chinese”;str1=“English”;str2=“Tianjin“;str3=“Chongqing“;Main方法有一个形式参数args,其类型就是字符串数组 该参数的功能是接收程序运行时通过命令行输入的数据 public class StringArraypublic static void main(String args) int i;for (i=0; iargs.length; i+)System.out.println(argsi); ,字符串数组,运行时,在Eclipse菜单的“运行” “运行配置” “(x)=自变量”中输入”one two three”,运行结果 one arg0 two arg1 three arg2,【例补5-9】将输入的n个英文单词(每个单词间空格间隔),按字典顺序重新排序输出,

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

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报