收藏 分享(赏)

Java语言程序设计-基础篇-中文ppt-第六章.ppt

上传人:guanlirenli 文档编号:3206919 上传时间:2018-10-07 格式:PPT 页数:104 大小:843.50KB
下载 相关 举报
Java语言程序设计-基础篇-中文ppt-第六章.ppt_第1页
第1页 / 共104页
Java语言程序设计-基础篇-中文ppt-第六章.ppt_第2页
第2页 / 共104页
Java语言程序设计-基础篇-中文ppt-第六章.ppt_第3页
第3页 / 共104页
Java语言程序设计-基础篇-中文ppt-第六章.ppt_第4页
第4页 / 共104页
Java语言程序设计-基础篇-中文ppt-第六章.ppt_第5页
第5页 / 共104页
点击查看更多>>
资源描述

1、1,第6章 一维数组,2,开放问题,读取一百数字,计算它们的平均值,然后找出有多少个数大于平均值。,3,解决方案,AnalyzeNumbers,Run with prepared input,4,学习目标,描述数组在程序设计中的必要性 (第6.1节)。 声明数组引用变量、创建数组 (第6.2.1-6.2.2节)。 初始化数组中的值 (第6.2.3节)。 使用下标变量访问数组元素(第6.2.4节)。 利用一条数组初始化语法声明、创建和初始化数组 (第6.2.5节)。 编写程序实现常用的数组操作(显示数组、对所有元素求和、求最大和最小元素、随意打乱、移动元素)(第6.2.6节 )。 使用for -

2、 each循环简化程序设计(第6.2.7)。 在LottoNumbers和DeckOfCards问题中应用数组 (第6.3-6.4节)。 将一个数组的内容复制到另一个数组 (第6.5节)。 开发和调用带数组参数和返回值的方法(第6.66.7节)。 定义带变长参数列表的方法(第6.8节)。 使用线性查找算法(第6 .9.1节)或二分查找算法(第6. 9.2节)查找数组的元素。 使用选择排序法对数组排序(第6.10.1节)。 使用插入排序算法使排序数组 (第6.10.2节)。 使用 Arrays 类中的方法(第6.11节)。,5,介绍数组,数组是一种数据结构,它表示一组相同类型的数据。,6,声明数

3、组变量,datatype arrayRefVar;举例: double myList;datatype arrayRefVar;/ 这种风格是允许的,但不推荐使用 举例: double myList;,7,创建数组,arrayRefVar = new datatypearraySize;举例: myList = new double10;myList0 引用数组中的第一个元素。 myList9 引用数组中的最后一个元素。,8,一步完成声明和创建,datatype arrayRefVar = newdatatypearraySize;double myList = new double10; d

4、atatype arrayRefVar = new datatypearraySize;double myList = new double10;,9,数组的大小,一旦数组被创建就不能再修改它的大小。可以通过使用arrayRefVar.length 来求得数组的大小。举例:myList.length returns 10,10,默认值,当数组被创建后,它的元素被赋予默认值数值型基本数据类型的默认值是0, char 类型的默认值为u0000 ,而boolean 类型默认值为false。,11,下标变量,数组元素可以通过下标来访问。数组下标是基于0的,就是说它从0开始到arrayRefVar.le

5、ngth-1结束。在图6.1中的例子中, 数组myList 包含10个double值而下标是从0到9。数组中的每个元素都可以使用下面一般被称为下标变量的语法表示:arrayRefVarindex;,12,使用下标变量,创建数组后,可以采用和一般变量相同的方法使用下标变量。例如:下面的代码是将myList0和myList1的值相加赋给myList2。myList2 = myList0 + myList1;,13,数组初始化语法,一步完成数组的声明、创建、初始化:double myList = 1.9, 2.9, 3.4, 3.5; 这种缩略语法必须用在一条语句中。,14,使用缩略符号 声明、创建

6、、初始化数组,double myList = 1.9, 2.9, 3.4, 3.5; 这里的缩略符号相当于以下面的语句: double myList = new double4; myList0 = 1.9; myList1 = 2.9; myList2 = 3.4; myList3 = 3.5;,15,注意,使用缩略符号时,你必须将声明、创建和初始化数组都放在一条语句中。将它们分开会引起语法错误。例如:下面的语句就是错误的: double myList; myList = 1.9, 2.9, 3.4, 3.5;,16,跟踪数组程序,public class Test public stati

7、c void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,声明数组变量value, 创建一个数组并将它的引用赋值给values,动 画,17,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1

8、;values0 = values1 + values4; ,i 变为 1,动 画,18,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i (=1)小于5,动 画,19,跟踪数组程序,public class Test public static void main(String args) int values =

9、new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这一行被执行后,values1是1,动 画,20,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i+后,i 变为 2,动 画,21,跟踪数组程序

10、,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i(= 2)小于5,动 画,22,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + val

11、uesi-1;values0 = values1 + values4; ,这一行被执行之后, values2 为3(2 + 1),动 画,23,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这之后,i就 变为 3.,动 画,24,跟踪数组程序,public class Test public static void m

12、ain(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i(=3)依旧小于5,动 画,25,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这

13、一行之后,values3变成 6(3 + 3),动 画,26,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这之后,i变成4,动 画,27,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (i

14、nt i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i(=4) 仍旧小于5,动 画,28,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这之后,values4变成 10(4 + 6),动 画,29,跟踪数组程序,public

15、class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,i+后,i 变成5,动 画,30,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;v

16、alues0 = values1 + values4; ,i ( =5) 5 为假。退出循环,动 画,31,跟踪数组程序,public class Test public static void main(String args) int values = new int5;for (int i = 1; i 5; i+) valuesi = i + valuesi-1;values0 = values1 + values4; ,这行之后,values0 为11 (1 + 10),动 画,32,处理数组,下面是一些示例: (使用输入值初始化数组) (使用随机数初始化数组) (打印数组) (对所

17、有元素求和) (找出最大元素) (找出最大元素的最小下标值) (随意打乱) (移动元素),33,使用输入值初始化数组,java.util.Scanner input = new java.util.Scanner(System.in); System.out.print(“Enter “ + myList.length + “ values: “); for (int i = 0; i myList.length; i+) myListi = input.nextDouble();,34,使用随机数初始化数组,for (int i = 0; i myList.length; i+) myLis

18、ti = Math.random() * 100; ,35,打印数组,for (int i = 0; i myList.length; i+) System.out.print(myListi + “ “); ,36,对所有元素求和,double total = 0; for (int i = 0; i myList.length; i+) total += myListi; ,37,找出最大的元素,double max = myList0; for (int i = 1; i max) max = myListi; ,38,随意打乱,39,移动元素,40,增强型for循环(for - eac

19、h循环),JDK 1.5引入了一个新的for循环,它可以让你不使用下标变量就可以顺序地遍历整个数组。 例如:下面的代码显示数组myList中的所有元素: for (double value: myList) System.out.println(value);一般来讲,这个语法是for (elementType value: arrayRefVar) / Process the value 当需要以其它顺序遍历该数组或改变数组中的元素时,你还是必须使用下标 变量。,41,问题:乐透号码,假设你要玩选10乐透游戏,每张筹码有10个范围从1到99的独特的数字。假设你买了一堆筹码,希望它们涵盖1到9

20、9的所有数字。编写一个程序,从一个文件中读取筹码上的数字,并检查是否涵盖所有的数字。 假设这个文件的最后一个数字是0。,LottoNumbers,Run,Lotto Numbers Sample Data,42,问题:一副牌,编写一个程序,它随机地从一副52张牌中选择4张。所有的牌可以使用一个名为deck的数组表示,这个数组用从0到51的初始值来填充,如下所示:int deck = new int52; / Initialize cards for (int i = 0; i deck.length; i+)decki = i;,DeckOfCards,Run,43,问题:一副牌(续),Dec

21、kOfCards,Run,GUI Demo (picking four cards),44,问题:一副牌,这个问题为今后构建一个更有趣和更具现实意义的应用程序打一个基础:参见练习题25.9。,45,复制数组,在程序中,你经常需要复制一个数组或数组的一部分。在这种情况下,你可能会尝试使用赋值语句(=),如下所示: list2 = list1;,46,复制数组,使用循环: int sourceArray = 2, 3, 1, 5, 10; int targetArray = new intsourceArray.length;for (int i = 0; i sourceArrays.lengt

22、h; i+)targetArrayi = sourceArrayi;,47,arraycopy工具,arraycopy(sourceArray, src_pos, targetArray, tar_pos, length);例如: System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);,48,传递数组给方法,public static void printArray(int array) for (int i = 0; i array.length; i+) System.out.print(arrayi +

23、“ “); ,Invoke the methodint list = 3, 1, 2, 6, 4, 2; printArray(list);,Invoke the method printArray(new int3, 1, 2, 6, 4, 2);,匿名数组,49,匿名数组,语句 printArray(new int3, 1, 2, 6, 4, 2); 使用下面的语法创建一个数组: new dataTypeliteral0, literal1, ., literalk; 这里没有数组的显式引用变量。这样的数组被称为匿名数组。,50,值传递,Java使用值传递的方法传递实参给方法。传递基本数据

24、类型变量的值与传递数组值会有很大不同。对于基本数据类型参数,传递的是实参的值。在方法中改变局部参数的值并不影响方法之外变量的值。对于数组类型参数,参数值是数组的引用,传递给方法的是这个引用。方法体中数组发生的改变,将会影响到作为参数传给方法的原始数组。,51,public class Test public static void main(String args) int x = 1; / x represents an int valueint y = new int10; / y represents an array of int valuesm(x, y); / Invoke m w

25、ith arguments x and ySystem.out.println(“x is “ + x);System.out.println(“y0 is “ + y0);public static void m(int number, int numbers) number = 1001; / Assign a new value to numbernumbers0 = 5555; / Assign a new value to numbers0 ,简单的例子,52,调用栈,当调用m(x,y)时,x和y的值被传递给 number 和 numbers。因为y包含的是数组的引用值,所以,num

26、bers现在包含的是指向同一数组的相同引用值。,53,调用栈,当调用m(x,y)时,x和y的值被传递给 number 和 numbers。因为y包含的是数组的引用值,所以,numbers现在包含的是指向同一数组的相同引用值。,54,堆,JVM将数组存储在一个被称作堆的内存区域,堆是用来动态分配内存的,在堆中的内存块可以按任意顺序分配和释放。,55,传递数组参数,目标:演示传递基本数据类型变量和传递数组变量的不同之处。,TestPassArray,Run,56,举例(续),57,从方法中返回数组,public static int reverse(int list) int result = n

27、ew intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,58,跟踪reverse方法,public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.l

28、ength - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = 1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,0,声明result 并创建数组,动 画,59,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length -

29、 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,0,i = 0 而 j = 5,动 画,60,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length -

30、1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,0,i (= 0) 小于6,动 画,61,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length - 1;

31、i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,1,i = 0 而 j = 5 将list0赋值给result5,动 画,62,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = res

32、ult.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,1,这之后, i 变为1 而 j 变为 4,动 画,63,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j

33、= result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,0,1,i(=1)小于6,动 画,64,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = resu

34、lt.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,2,1,i = 1 而 j = 4 将list1赋值给给 result4,动 画,65,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (i

35、nt i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,2,1,这之后, i 变成2 而 j 变为 3,动 画,66,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;f

36、or (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,0,2,1,i (=2) 依旧小于6,动 画,67,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for

37、 (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,3,2,1,i = 2 而 j = 3 将listi赋值给 resultj,动 画,68,跟踪reverse方法(续),public static int reverse(int list) int result = new i

38、ntlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,3,2,1,这之后, i 变成 3 而 j 变成 2,动 画,69,跟踪reverse方法(续),public static int reverse(int list) int result =

39、 new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,0,3,2,1,i(=3)依旧小于6,动 画,70,跟踪reverse方法(续),public static int reverse(int list) int result = new

40、 intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,4,3,2,1,i = 3 而 j = 2将listi赋值给 resultj,动 画,71,跟踪reverse方法(续),public static int reverse(int list)

41、int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,4,3,2,1,这之后, i 变成 4 而 j 变成 1,动 画,72,跟踪reverse方法(续),public static int reverse(int

42、list) int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,0,4,3,2,1,i(=4)依旧小于6,动 画,73,跟踪reverse方法(续),public static int reverse(int list

43、) int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,5,4,3,2,1,i = 4 而 j = 1 将listi赋值给 resultj,动 画,74,跟踪reverse方法(续),public static int

44、 reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,5,4,3,2,1,这之后, i变成5 而 j 变成 0,动 画,75,跟踪reverse方法(续),public static

45、 int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,int list1 = new int1, 2, 3, 4, 5, 6; int list2 = reverse(list1);,list,result,1,2,3,4,5,6,0,5,4,3,2,1,i (=5) 依旧小于6,动 画,76,跟踪reverse方法(续),public static int reverse(int list) int result = new intlist.length;for (int i = 0, j = result.length - 1; i list.length; i+, j-) resultj = listi;return result; ,

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

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

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


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

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

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