Java语言程序设计案例教程-第4章.ppt_第1页
Java语言程序设计案例教程-第4章.ppt_第2页
Java语言程序设计案例教程-第4章.ppt_第3页
Java语言程序设计案例教程-第4章.ppt_第4页
Java语言程序设计案例教程-第4章.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 数组和方法,本章主要介绍Java语言的数组和方法。通过学习读者可以掌握方法及其参数的使用、方法调用方法、数组的使用和排序,以及方法、数组与循环语句的综合应用。 本章要点 4.1 数组 4.2 方法 思考与练习4,本章逻辑结构,4.1 数组 4.1.1 什么是数组 4.1.2 数组的使用 实例27 投票选佳丽 4.1.3 二维数组 实例28 求两个矩阵的和 实例29 矩阵的行列互换 4.1.4 什么是排序 实例30 插入排序法 实例31 选择排序法 实例32 冒泡排序法,本章逻辑结构,4.2 方法 4.2.1 方法 实例33 求最大公因数和最小公倍数之二 4.2.2 递归 实例34 费波

2、纳契数列 实例35 插入排序法之二 实例36 哥德巴赫猜想,4.1 数组,4.1.1 什么是数组 在实际应用中,经常需要处理一批相互有联系、有一定顺序、同一类型和具有相同性质的数据。例如,50个学生的期末总成绩,一个矩阵中的所有数据等等。Java语句提供了数组来保存和处理这类数据。数组是指一组类型相同的数据,每个数据称为一个数组元素。例如:如果上述50个学生的期末总成绩构成一个数组,则每个学生的成绩叫数组元素;如果某个矩阵中的数据构成一个数组,则其中的每个数字叫数组元素。 有了数组,就可以用同一个变量名来表示一系列的数据,并用下标来表示同一数组中的不同数组元素。每个元素都具有一个下标值,也就是

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

4、)每个数组都有长度,也就是其所能含有元素的个数。,4.1 数组,4.1.2 数组的使用 1使用数组的步骤 使用数组一共有3个步骤,分别介绍如下。 (1)定义数组。在使用数组之前必须先定义数组。定义数组主要是定义数组的名称和数组中元素的数据类型,其形式有两种: 数组元素类型 数组名称; 数组元素类型 数组名称; 其中的数组名称必须符合Java语言标识符规则,例如,以下定义语句都是合法的。 int results; boolean info; double tips_01; String abc; 定义数组的目的只是告诉系统一个新的数组的名称和类型,数组本身不能存放任何数组元素,现阶段的数组值为n

5、ull。,4.1 数组,4.1.2 数组的使用 1使用数组的步骤 (2)创建数组。指定数组的长度,并分配相应的内存空间。创建数组使用关键字new,例如,results = new int50;表示给数组results分配内存空间,用来保存50个int类型的数字。定义数组和创建数组也可以合并为一条语句,例如, int results = new int50; String abc = new String100; 在创建数组后,数组的默认值由其元素的类型决定,例如:整型数据的默认值为0,实型数据的默认值为0.0,布尔型数据的默认值为false。,4.1 数组,4.1.2 数组的使用 1使用数组的

6、步骤 (3)数组元素 在Java语言中,使用下标来标识数组中特定位置的元素,其形式为:数组名下标。下标值由0开始到数组长度减1为止。以前面定义并创建的results数组为例:result0表示数组中的第一个元素;numbers49表示数组中的最后一个元素。数组results的结构如图4.1所示。 图4.1 数组results的结构,图4.1 数组results的结构,4.1 数组,4.1.2 数组的使用 2数组的初始化 数组的初始化是指不使用系统的数组默认值,自行给数组赋初值,其方法有2种: (1)按照顺序依次给每个元素赋值。例如给数组results赋值: results0 = 87; res

7、ults1 = 90; results48 = 45; results49 = 100;,4.1 数组,4.1.2 数组的使用 2数组的初始化 (2)在定义数组的同时直接给数组赋初值,初值的个数是数组的长度。初值必须用大括号括起来,用逗号分隔开,例如: int results = 87,90,77,55,98,37,64,100 ; String nums = one,two,three,four,five,six,seven,eight ; 在使用第2种方法时,一定要注意定义和初始化要在一条语句中完成,也就是说不可以定义数组后,在另一条语句中再给数组赋初值。例如: int numbers;

8、numbers = 1, 2, 3 ; 是语法错误的语句。只可以写成 int numbers = 1, 2, 3 ;,4.1 数组,4.1.2 数组的使用 3数组的复制 事实上,我们创建的每个数组都是Array类中的一个对象,所以在复制数组时有两种情况。 (1)两个数组指向同一个元素空间。也就是说我们定义并创建了一个数组,其在内存中具有一定的空间,然后又定义了一个数组,让其同样表示该内存空间中的数组元素。例如: int num_1 = 1, 2, 3, 4, 5, 6; int num_2; num_2 = num_1; 其中,num_2 = num_1;语句表示数组num_2与数组num_1

9、具有同样的元素,其关系如图4.2所示。,4.1 数组,4.1.2 数组的使用 3数组的复制,图4.2 数组num_1与num_2的关系,4.1 数组,4.1.2 数组的使用 3数组的复制 如果改变一个数组中某个元素的值,则另一个数组中相应位置的元素值也随之改变。例如:让num_28 = 60,则num_18中的值也随之变为60。这是因为num_1和num_2指向的是同一个数组,num_18和num_28保存的是同一个数值。 (2)两个数组指向内容相同的两个元素空间。如果要真正复制一个数组,使得我们在修改复制数组的值时,不会影响到源数组的话,则需要定义一个和源数组长度相同的数组,然后再把源数组中

10、的元素一一复制给新的数组。 求任何数组的长度都可以使用: 数组名.length 数组num_1和num_2的关系如图4.3所示。,4.1 数组,4.1.2 数组的使用 3数组的复制,图4.3 数组num_1与num_2的关系,4.1 数组,4.1.3 二维数组 1定义二维数组 与定义一维数组类似,定义二维数组也有两种形式: (1)数组元素类型 数组名称; 例如: int results; char c; (2)数组元素类型 数组名称; 例如: String abc; double company_01;,4.1 数组,4.1.3 二维数组 2创建二维数组 二维数组可以看作一个按照行和列存储数据

11、的内存空间。我们可以按照所需确定数组每行和每列的长度,有两种创建方法。 (1)数组每行、每列之间长度相同。 例如,int results = new int23;语句表示创建一个2行3列的二维数组,其结构如图4.5所示。该数组共有result00、result01、result02、result10、result11和result12六个数组元素。,图4.5 二维数组results,4.1 数组,4.1.3 二维数组 2创建二维数组 (2)数组每行、每列之间长度不相同。 例如: results = new int2;/语句表示创建一个2行的二维数组。 results0 = new int3;/

12、语句表示该数组的第一行有3列,也就是3个元素。 results1 = new int5;/语句表示该数组的第二行有5列,也就是5个元素。 数组results的结构如图4.6所示。,图4.6 二维数组results,4.1 数组,4.1.3 二维数组 3初始化二维数组 与初始化一维数组类似,初始化二维数组也有两种方法。 (1)按照顺序依次给每个元素赋值。 例如给数组results赋值: int results; results = new int23; results00 = 67; results01 = 97; results02 = 100; results10 = 89; results

13、11 = 73; results12 = 65; (2)在定义数组的同时直接给数组赋初值。 整个初值数据用大括号括起来,其中的每一行初值也必须用大括号括起来,用逗号分隔开。内层大括号内的数值也要用逗号分隔开。例如: int results = 84,77,100 , 98,63,65 ;,4.1 数组,4.1.3 二维数组 4二维数组的长度 二维数组的长度是指行数的个数,二维数组每行的长度是指每行的元素个数。例如:results.length表示二维数组results的长度,也就是行数;results i.length表示二维数组results第i行的长度,也就是元素个数。,4.1 数组,4.

14、1.4 什么是排序 所谓排序是指将一组无序的数据元素调整为一个从小到大或者从大到小排列的有序序列。排序是计算机程序设计中的一类重要运算。 在实际工作中,我们经常要将数据进行比较、排序,以便对已排序的数据进行检索。例如:学生的高考成绩需要排序后,才能进行录取工作。 排序是计算机语言编程的一个经典问题,到目前为止最常用排序方法有插入排序法、选择排序法和冒泡排序法等排序法。不论使用哪种排序方法编写Java程序,其最根本的操作就是变量的数值交换。下面我们将通过实例来介绍3种常用排序法。,4.2 方法,4.2.1 方法 1定义方法 定义方法的形式有多种,这里介绍最基本的形式。 方法类型 方法名称( 参数

15、1,参数2,参数n ) 方法体 其中,方法类型也就是返回值的类型,它要与方法中的return语句内的返回数值类型保持一致。如果方法没有返回值,则方法类型为void。例如,Java Application中的main()方法的类型就是void,表示该方法没有返回值。方法的返回值类型可以是普通数据类型、数组和类。 方法名称后面的小括号中,可以有方法参数,也可以没有参数。当参数为多个时,要用逗号隔开。每个参数都必须定义类型和名称,类型可以是普通变量、数组和类的对象,名称要符合Java标识符的规则。 方法体是在一对大括号内的一个或者多个语句。这些语句用来处理方法参数、类的全局变量和方法本身的局部变量中

16、的数据,最后将结果通过return语句返回。或者,不返回任何值,只是完成指定的工作。,4.2 方法,4.2.1 方法 2变量作用范围 上面我们提到了全局变量(Global Variable)和局部变量(Local Variable),它们是根据变量被定义的位置不同而划分的。 (1)全局变量:是在类中但不在任何方法内定义的变量。全局变量可以在整个类中,包括类的所有方法中使用。 (2)局部变量:是在类中的某个方法内定义的变量。局部变量只可以在其定义的方法内使用。如果要在其他方法内或类中使用,则会产生错误。 3调用方法 定义方法后,必须调用方法才能执行其中的语句,实现其功能。根据方法类型的不同,有两

17、种调用形式。 (1)void类型的方法。把方法调用作为一条语句。例如,print(); (2)其他类型的方法。把方法调用作为一个表达式或者表达式中的一部分。例如,sum = numbers( n );语句中方法调用numbers( n )作为赋值语句的一部分。,4.2 方法,4.2.1 方法 4return语句 return语句是在方法中使用。它的作用是终止当前方法的执行,返回到调用该方法的语句处,并继续向下执行语句。return语句有两种形式。 (1)return 表达式; 计算表达式的值,然后将该值返回到调用该方法的语句中。Java语言要求返回值(也就是表达式的值)必须与方法声明中的返回值

18、类型一致。 (2)return; 当方法的类型为void,不需要返回值时,可以使用这种格式终止方法的执行,并返回,继续执行下面的语句。这种格式一般用于if语句或者switch语句等选择结构形式。 如果忽略该种格式,则在执行完方法中的所有语句后,自动返回并继续执行下面的语句。,4.2 方法,4.2.1 方法 5方法的参数 方法参数是在调用方法的同时,传递给方法的数据,用于方法体语句中。调用方法时所传递的参数类型、参数顺序和参数个数必须与方法中的参数类型、参数顺序和参数个数一致。例如,如果调用a()方法的语句为int i = a( 100,满分,A ),则a()方法中的参数必须为a( int i,

19、String s, char c ),其中,作为参数的变量名称可以自行确定,但参数类型和参数顺序必须相同。,4.2 方法,4.2.2 递归 1递归 递归(Recursion)方式可以把一个大型复杂的问题层层转化,最终变成一个与原问题类似的简单问题。这样只需要少量的操作就可以解决一个复杂的计算,大大地减少了程序的语句数量。递归最主要的两个部分是: (1)递归出口。递归出口是递归结束的条件,也就是最终变成的简单问题。这个简单问题的解决方法必须已经知道,或者已经给出计算结果。例如,在求费波纳契数列时,其递归出口为第一和第二个数的值为1。 (2)递归表达式。从递归出口到最终复杂问题的转化规律。例如,在求费波纳契数列时,其递归表达式为一个数是其前两个数字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论