第5章 数组及其应用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 计算班级的平均成绩
在班级类StudentClass中增加方法aveScore()
28
5.2 对象数组
• 求班级最高分、最低分
在班级类StudentClass中增加方法maxScore() 及minScore()
29
5.2 对象数组
• 在方法中返回对象
在实际应用中,只知道班级最高分和最低分往 往还不够,通常还需要知道获得最高分学生的 信息及最低分学生的信息。 我们可以增加方法maxScoreStudent()及 minScoreStudent ()实现此功能。 在这种情况下,方法的返回值就不应该是int类 型了,而应该是Student类型(如果我们只返回 一位学生信息的话)。
42
5.3 二维数组
• 二维数组的引用
例,为二维数组的每个元素赋值,并求和。
43
5.4 数组的应用
• 查找
已知学生的学号,查找此学生是否存在。 如果存在,返回其在数组中的下标位置;如果不存在, 返回-1。
44
5.4 数组的应用
• 增加元素:在数组的末尾增加一个学生对象。
在增加之前需要先判断数组中是否还有空间, 另外数组中存储的学生的学号不能重复。 在增加之前需要在数组中查找将要增加的学号 是否已经存在。 如果增加成功,返回true;否则,返回false。
52
5.4 数组的应用
• 排序:插入排序
• •
假设数组a中有n个元素a[0]、a[1]、……、a[n-1],则 可以按照某种属性对其进行排序。 按照直接插入法,首先要把a[0]作为已排序子序列,然 后逐一将a[1]、a[2]、……、a[n-1]插入到已排序子序 列中。 每插入一个元素a[i]都要执行如下两步操作: (1) 在已排序子序列中找一个合适位置j,使a[j]>a[i], 并且a[i]>a[j+1]。 (2) 将a[i]插入到a[j]之后。在插入之前,需要先保存 a[i]的值,之后将a[i-1]、……、a[j+1]依次向后移一 位(后移操作也可在第一步的查找过程中进行)。
10
5.1 数组的概念
如果要为数组指定初始值,可以在声明数组名 时给出,也可以在数组创建表达式中给出。 如果在声明数组名时,给出了数组的初始值, 程序便会利用数组的初始值创建数组,并对它 的各个元素进行初始化。其语法形式如下:
Type arrayName[]={element1[, element2, …]};
22
5.2 对象数组
• StudentClass类定义(1)
23
5.2 对象数组
• StudentClass类定义(2)
24
5.2 对象数组
• 声明测试类Tester1(1)
25
5.2 对象数组
• 声明测试类Tester1(2)
26
5.2 对象数组
• 声明测试类Tester1(3)
27
5.2 对象数组
5.4 数组的应用
• 删除元素
已知学号,删除一个学生。
49
5.4 数组的应用
• 排序:选择排序
选择排序的基本思想是先在未排序序列中选一 个最大(或最小)元素,作为已排序子序列, 然后再重复地从未排序子序列中选取一个最大 (或最小)元素,把它加到已排序序列中,作 为已排序子序列的最后一个元素,直到把未排 序子序列中的元素处理完为止。
Circle [] circles; //声明circles数组 //创建circles数组,即分配内存空间 circles = new Circle [10];
15
5.2 对象数组
• 用数组存储对象
对于对象数组,使用运算符new只是为数组本身 分配空间,但数组元素,即Circle对象,还没 有创建。 数组元素被初始化为空(null),如图所示。
假设要计算某个班某门课程的平均成绩。 可以从键盘输入成绩后进行累加,同时记录已 输入成绩的个数,成绩都输入结束后,输入一 个负数标志结束。 输入结束后,根据累加和及数据个数就可以计 算出平均分。
3
5.1 数组的概念
4
5.1 数组的概念
如果还要计算每个人的分数与平均分的差值, 则需要保存每个人的分数。否则,计算出平均 分后,并不能计算出差值。 解决这个问题时,并不是定义多个变量去存储 分数,而是使用数组。 可以声明一个由int型数据组成的一维数组如下: int[] s;
30
5.2 对象数组
• 在方法中返回对象
31
5.2 对象数组
• 在方法中返回对象
如果一个班中,获得最高分数的同学可能不止 一位,当然,最低分数的同学也可能不止一位。 如果希望将获得最高分数的同学都列出来,最 低分数的同学也都列出来,该如何去做呢?
32
5.2 对象数组
• 在方法中返回对象数组
int a[][]; a=new int[2][]; a[0]=new int[3]; a[1]=new int[5];
39
5.3 二维数组
• 二维数组的初始化
多维数组也可以在声明中用初始化值进行初始 化,比如可以这样初始化一个2行3列的二维数 组:
int a[][]={{1,2,3},{4,5,6}};
• 二维数组的声明
多维数组可以看作数组的数组,即高维数组的 每个元素为一个低维数组。 二维数组声明的格式为:
Type[][] 或者:
Type
arrayName;
arrayName[][];
36
5.3 二维数组
• 二维数组的创建
可以用数组创建表达式创建每一行都具有相同 列数的多维数组,格式如下: arrayName=new Type[length1][length2];
length1表示二维数组的行数,length2表示列 数。
37
5.3 二维数组
• 二维数组的创建
例如,创建一个4乘5的二维数组: int a[][]; //声明二维数组 a=new int[4][5]; //创建二维数组;
38
5.3 二维数组
• 二维数组的创建
Java语言不要求多维数组的每一维长度相同, 例如,可以创建如下的二维数组:
也可以在一条声明语句中创建多个数组,如:
String[] s1=new String[5], s2=new String[10];
9
5.1 数组的概念
数组声明后必须经过初始化才能引用,也就是 要给数组的元素赋初始值。 创建数组时,如果没有指定初始值,数组便被 赋予默认值作为初始值。 对于基本类型的数值数据,默认的初始值为0; boolean类型数据的默认值为false; 引用类型 元素的默认值为null。
数组中各行的长度还可以不同。
40
5.3 二维数组
• 例:声明、创建并初始化二维数组
int[][] myArray; myArray = new int[3][] ; myArray[0] = new int[3] ; int[] x = {0, 2}; int[] y = {0, 1, 2, 3, 4} ; myArray[1] = x ; myArray[2] = y ;
18
5.2 对象数组
• 例5-1,使用数组存储一个班的学生 信息及考试成绩。
学生信息包括学号、姓名、某门课的成绩。 首先声明学生类Student:
属性包括:学号(id),姓名(name),成绩 (score)。 方法包括:构造方法,get方法,set方法,toString方 法,compare方法(比较两个学生的成绩,结果分大于、 小于、等于)。
12
5.1 数组的概念
元素的个数为数组的长度(length),可以通 过arrayName.length引用。 元素下标最大值为length-1。
13
5.1 数组的概念
使用数组s存储学生成绩,计算平均分,进而计 算并显示与平均分的差值。
14
5.2 对象数组
• 用数组存储对象
数组元素并不局限于简单数据类型,也可以是 对象,这样的数组称为对象数组。 对象数组的声明和创建同简单数据类型的数组 一样。例如:
如果希望将获得最高分数的同学都列出来,最 低分数的同学也都列出来,就需要对 maxScoreStudent()及minScoreStudent ()方法 进行改进,使其返回Student类型的数组。
33
5.2 对象数组
• 在方法中返回对象数组
34
5.2 对象数组
• 在方法中返回对象数组
35
5.3 二维数组
例如,
int s[]={90, 80, 85, 100, 92, 96, 68, 84, 78, 76 };
11
5.1 数组的概念
声明并初始化数组之后,就可以在程序中引用 数组元素了。 使用数组名和下标值来确定引用的数组元素, 格式如下:
arrayName[arrayIndex]
数组下标必须是int,short,byte或者char类 型中的一种,并且从0开始计数。
此时不能访问数组的任何元素,需要创建数组 元素后,才能访问。
16
5.2 对象数组
• 用数组存储对象
下面的语句创建了一个Circle对象,并将对象 的地址赋给数组的第一个元素。 circles [0] = new Circle();
17
5.2 对象数组
• 用数组存储对象
此时还没有给对象赋值,这时对象具有缺省值。 索引表达式circles[0]指向circles数组的第一个对象, 要给这个对象赋值,我们可以执行下面的语句: circles[0].setRadius(2.5F);
5
5.1 数组的概念
• 声明一维数组的语法
Type[ ] arrayName;
方括号表示数组声明,也可以出现在数组名的 后面,如:
Type arrayName[ ];
6
5.1 数组的概念
在Java中,数组是一种引用数据类型。 与原始数据类型不同的是,分配给数组的内存 空间不是固定的,它依赖于数组元素的类型和 个数。 声明数组时无需指明数组元素的个数,也不为 数组元素分配内存空间。
50
5.4 数组的应用
• 排序:选择排序(降序)
在StudentClass类中增加选择排序方法。
51
5.4 数组的应用
• 排序:插入排序
插入排序是将待排序的数据按一定的规则逐一插入到已 排序序列中的合适位置处,直到将全部数据都插入为止。 插入的规则不同,便形成了不同的插入排序方法。其中, 算法最简单的为直接插入排序方法。 直接插入排序方法先以未排序序列的第一个元素作为已 排序子序列,然后从原来的第二个元素起,将各元素逐 一插入到已排序子序列中合适的位置,直到把全部元素 都插入为止。
19
5.2 对象数组
• Student类定义(1)
20
5.2 对象数组
• Student类定义(2)
21
5.2 对象数组
• 班级类StudentClass
属性包括:班级名称(name),最大容量 (capacity),学生(students),实际人数 (size)。其中,最大容量(capacity)应定 义为静态属性。 方法包括:构造方法,get方法,set方法, toString方法。
45
5.4 数组的应用
• 增加元素:在数组的末尾增加一个学生对象。
46
5.4 数组的应用
• 删除元素
已知一个Student对象,要将此对象从数组中删 除,首先要查找此对象是否存在。 如果存在,则可以将其删除,方法是数组中被 删除元素后面的元素依次前移。
47
5.4 数组的应用
• 删除元素
48
7
5.1 数组的概念
在Java中,使用new运算符来分配内存空间存储 数组中的值。 下面的语句是为上面声明的数组s分配内存空间, 存储10个int型数值。
s = new int[10]; //创建长度为10的数组
8
5.1 数组的概念
可以在一条语句中声明数组,同时为其分配空 间,如:
int[] s = new int[10];
41
5.3 二维数组
• 二维数组的引用
二维数组也用数组名和下标值来确定引用的数 组元素,语法形式如下: arrayName[arrayIndex1][arrayIndex2]
通过arrayName.length可以得到二维数组的行 数,通过arrayName[i].length可以得到第i行 的列数。
第5章 数组及其应用
• • • • 数组的概念 对象数组 二维数组 数组的应用
1
5.1 数组的概念
在Java中,数组是由相同类型的数据组成的有 序集合。 数据元素可以是基本数据类型,也可以是引用 类型。 通过数组名和数组元素下标(或称为索引)可 以引用数组中的元素。
2
5.1 数组的概念
ቤተ መጻሕፍቲ ባይዱ
在班级类StudentClass中增加方法aveScore()
28
5.2 对象数组
• 求班级最高分、最低分
在班级类StudentClass中增加方法maxScore() 及minScore()
29
5.2 对象数组
• 在方法中返回对象
在实际应用中,只知道班级最高分和最低分往 往还不够,通常还需要知道获得最高分学生的 信息及最低分学生的信息。 我们可以增加方法maxScoreStudent()及 minScoreStudent ()实现此功能。 在这种情况下,方法的返回值就不应该是int类 型了,而应该是Student类型(如果我们只返回 一位学生信息的话)。
42
5.3 二维数组
• 二维数组的引用
例,为二维数组的每个元素赋值,并求和。
43
5.4 数组的应用
• 查找
已知学生的学号,查找此学生是否存在。 如果存在,返回其在数组中的下标位置;如果不存在, 返回-1。
44
5.4 数组的应用
• 增加元素:在数组的末尾增加一个学生对象。
在增加之前需要先判断数组中是否还有空间, 另外数组中存储的学生的学号不能重复。 在增加之前需要在数组中查找将要增加的学号 是否已经存在。 如果增加成功,返回true;否则,返回false。
52
5.4 数组的应用
• 排序:插入排序
• •
假设数组a中有n个元素a[0]、a[1]、……、a[n-1],则 可以按照某种属性对其进行排序。 按照直接插入法,首先要把a[0]作为已排序子序列,然 后逐一将a[1]、a[2]、……、a[n-1]插入到已排序子序 列中。 每插入一个元素a[i]都要执行如下两步操作: (1) 在已排序子序列中找一个合适位置j,使a[j]>a[i], 并且a[i]>a[j+1]。 (2) 将a[i]插入到a[j]之后。在插入之前,需要先保存 a[i]的值,之后将a[i-1]、……、a[j+1]依次向后移一 位(后移操作也可在第一步的查找过程中进行)。
10
5.1 数组的概念
如果要为数组指定初始值,可以在声明数组名 时给出,也可以在数组创建表达式中给出。 如果在声明数组名时,给出了数组的初始值, 程序便会利用数组的初始值创建数组,并对它 的各个元素进行初始化。其语法形式如下:
Type arrayName[]={element1[, element2, …]};
22
5.2 对象数组
• StudentClass类定义(1)
23
5.2 对象数组
• StudentClass类定义(2)
24
5.2 对象数组
• 声明测试类Tester1(1)
25
5.2 对象数组
• 声明测试类Tester1(2)
26
5.2 对象数组
• 声明测试类Tester1(3)
27
5.2 对象数组
5.4 数组的应用
• 删除元素
已知学号,删除一个学生。
49
5.4 数组的应用
• 排序:选择排序
选择排序的基本思想是先在未排序序列中选一 个最大(或最小)元素,作为已排序子序列, 然后再重复地从未排序子序列中选取一个最大 (或最小)元素,把它加到已排序序列中,作 为已排序子序列的最后一个元素,直到把未排 序子序列中的元素处理完为止。
Circle [] circles; //声明circles数组 //创建circles数组,即分配内存空间 circles = new Circle [10];
15
5.2 对象数组
• 用数组存储对象
对于对象数组,使用运算符new只是为数组本身 分配空间,但数组元素,即Circle对象,还没 有创建。 数组元素被初始化为空(null),如图所示。
假设要计算某个班某门课程的平均成绩。 可以从键盘输入成绩后进行累加,同时记录已 输入成绩的个数,成绩都输入结束后,输入一 个负数标志结束。 输入结束后,根据累加和及数据个数就可以计 算出平均分。
3
5.1 数组的概念
4
5.1 数组的概念
如果还要计算每个人的分数与平均分的差值, 则需要保存每个人的分数。否则,计算出平均 分后,并不能计算出差值。 解决这个问题时,并不是定义多个变量去存储 分数,而是使用数组。 可以声明一个由int型数据组成的一维数组如下: int[] s;
30
5.2 对象数组
• 在方法中返回对象
31
5.2 对象数组
• 在方法中返回对象
如果一个班中,获得最高分数的同学可能不止 一位,当然,最低分数的同学也可能不止一位。 如果希望将获得最高分数的同学都列出来,最 低分数的同学也都列出来,该如何去做呢?
32
5.2 对象数组
• 在方法中返回对象数组
int a[][]; a=new int[2][]; a[0]=new int[3]; a[1]=new int[5];
39
5.3 二维数组
• 二维数组的初始化
多维数组也可以在声明中用初始化值进行初始 化,比如可以这样初始化一个2行3列的二维数 组:
int a[][]={{1,2,3},{4,5,6}};
• 二维数组的声明
多维数组可以看作数组的数组,即高维数组的 每个元素为一个低维数组。 二维数组声明的格式为:
Type[][] 或者:
Type
arrayName;
arrayName[][];
36
5.3 二维数组
• 二维数组的创建
可以用数组创建表达式创建每一行都具有相同 列数的多维数组,格式如下: arrayName=new Type[length1][length2];
length1表示二维数组的行数,length2表示列 数。
37
5.3 二维数组
• 二维数组的创建
例如,创建一个4乘5的二维数组: int a[][]; //声明二维数组 a=new int[4][5]; //创建二维数组;
38
5.3 二维数组
• 二维数组的创建
Java语言不要求多维数组的每一维长度相同, 例如,可以创建如下的二维数组:
也可以在一条声明语句中创建多个数组,如:
String[] s1=new String[5], s2=new String[10];
9
5.1 数组的概念
数组声明后必须经过初始化才能引用,也就是 要给数组的元素赋初始值。 创建数组时,如果没有指定初始值,数组便被 赋予默认值作为初始值。 对于基本类型的数值数据,默认的初始值为0; boolean类型数据的默认值为false; 引用类型 元素的默认值为null。
数组中各行的长度还可以不同。
40
5.3 二维数组
• 例:声明、创建并初始化二维数组
int[][] myArray; myArray = new int[3][] ; myArray[0] = new int[3] ; int[] x = {0, 2}; int[] y = {0, 1, 2, 3, 4} ; myArray[1] = x ; myArray[2] = y ;
18
5.2 对象数组
• 例5-1,使用数组存储一个班的学生 信息及考试成绩。
学生信息包括学号、姓名、某门课的成绩。 首先声明学生类Student:
属性包括:学号(id),姓名(name),成绩 (score)。 方法包括:构造方法,get方法,set方法,toString方 法,compare方法(比较两个学生的成绩,结果分大于、 小于、等于)。
12
5.1 数组的概念
元素的个数为数组的长度(length),可以通 过arrayName.length引用。 元素下标最大值为length-1。
13
5.1 数组的概念
使用数组s存储学生成绩,计算平均分,进而计 算并显示与平均分的差值。
14
5.2 对象数组
• 用数组存储对象
数组元素并不局限于简单数据类型,也可以是 对象,这样的数组称为对象数组。 对象数组的声明和创建同简单数据类型的数组 一样。例如:
如果希望将获得最高分数的同学都列出来,最 低分数的同学也都列出来,就需要对 maxScoreStudent()及minScoreStudent ()方法 进行改进,使其返回Student类型的数组。
33
5.2 对象数组
• 在方法中返回对象数组
34
5.2 对象数组
• 在方法中返回对象数组
35
5.3 二维数组
例如,
int s[]={90, 80, 85, 100, 92, 96, 68, 84, 78, 76 };
11
5.1 数组的概念
声明并初始化数组之后,就可以在程序中引用 数组元素了。 使用数组名和下标值来确定引用的数组元素, 格式如下:
arrayName[arrayIndex]
数组下标必须是int,short,byte或者char类 型中的一种,并且从0开始计数。
此时不能访问数组的任何元素,需要创建数组 元素后,才能访问。
16
5.2 对象数组
• 用数组存储对象
下面的语句创建了一个Circle对象,并将对象 的地址赋给数组的第一个元素。 circles [0] = new Circle();
17
5.2 对象数组
• 用数组存储对象
此时还没有给对象赋值,这时对象具有缺省值。 索引表达式circles[0]指向circles数组的第一个对象, 要给这个对象赋值,我们可以执行下面的语句: circles[0].setRadius(2.5F);
5
5.1 数组的概念
• 声明一维数组的语法
Type[ ] arrayName;
方括号表示数组声明,也可以出现在数组名的 后面,如:
Type arrayName[ ];
6
5.1 数组的概念
在Java中,数组是一种引用数据类型。 与原始数据类型不同的是,分配给数组的内存 空间不是固定的,它依赖于数组元素的类型和 个数。 声明数组时无需指明数组元素的个数,也不为 数组元素分配内存空间。
50
5.4 数组的应用
• 排序:选择排序(降序)
在StudentClass类中增加选择排序方法。
51
5.4 数组的应用
• 排序:插入排序
插入排序是将待排序的数据按一定的规则逐一插入到已 排序序列中的合适位置处,直到将全部数据都插入为止。 插入的规则不同,便形成了不同的插入排序方法。其中, 算法最简单的为直接插入排序方法。 直接插入排序方法先以未排序序列的第一个元素作为已 排序子序列,然后从原来的第二个元素起,将各元素逐 一插入到已排序子序列中合适的位置,直到把全部元素 都插入为止。
19
5.2 对象数组
• Student类定义(1)
20
5.2 对象数组
• Student类定义(2)
21
5.2 对象数组
• 班级类StudentClass
属性包括:班级名称(name),最大容量 (capacity),学生(students),实际人数 (size)。其中,最大容量(capacity)应定 义为静态属性。 方法包括:构造方法,get方法,set方法, toString方法。
45
5.4 数组的应用
• 增加元素:在数组的末尾增加一个学生对象。
46
5.4 数组的应用
• 删除元素
已知一个Student对象,要将此对象从数组中删 除,首先要查找此对象是否存在。 如果存在,则可以将其删除,方法是数组中被 删除元素后面的元素依次前移。
47
5.4 数组的应用
• 删除元素
48
7
5.1 数组的概念
在Java中,使用new运算符来分配内存空间存储 数组中的值。 下面的语句是为上面声明的数组s分配内存空间, 存储10个int型数值。
s = new int[10]; //创建长度为10的数组
8
5.1 数组的概念
可以在一条语句中声明数组,同时为其分配空 间,如:
int[] s = new int[10];
41
5.3 二维数组
• 二维数组的引用
二维数组也用数组名和下标值来确定引用的数 组元素,语法形式如下: arrayName[arrayIndex1][arrayIndex2]
通过arrayName.length可以得到二维数组的行 数,通过arrayName[i].length可以得到第i行 的列数。
第5章 数组及其应用
• • • • 数组的概念 对象数组 二维数组 数组的应用
1
5.1 数组的概念
在Java中,数组是由相同类型的数据组成的有 序集合。 数据元素可以是基本数据类型,也可以是引用 类型。 通过数组名和数组元素下标(或称为索引)可 以引用数组中的元素。
2
5.1 数组的概念
ቤተ መጻሕፍቲ ባይዱ