- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Example:CountLettersInArray.java
搜索数组
线性搜索法(linear searching)将一个值与数组的每个 元素进行比较.如果找到相同的元素,返回元素的索 引;否则返回-1. 二分搜索法(binary searching)是在一个已排序的数组 中搜索特定元素.假设数组已按升序排列,将关键字 与数组中间元素进行比较:
声明和创建在一条语句中.
datatype[] arrayRefVar= new datatype[arraySize]; 或者 datatype arrayRefVar[] = new datatype[arraySize]; 例如: double[] myList = new double[10]; 或者 double myList[] = new double[10];
访问数组
一个数组的大小在创建这个数组之后不能被改变.可 以用以下语法进行访问数组的长度:
arrayRefVar.length 例如: myList.length的值为10.
数组元素通过索引进行访问.元素的索引从0开始, 范围从0到length-1.
arrayRefVar[index] 例如: myList[0]表示数组的第一个元素 myList[9]表示数组的最量作为实参传递给方法.
基本数据类型传递的是实际值的拷贝,修改形参,不影 响实参. 数组引用变量中传递的是对象的引用,修改形参,将改 变实参引用的数组对象.
实参 : 1 copy 形参 : 1 基本类型 实参 : ref copy 形参 : ref 数组类型 array
也可以从方法中返回数组.
[3] 10 11 12 int[][] array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };
二维数组的长度
二维数组的每个元素是一个一维数组.
数组X的长度是数组X的元素的个数,可由X.length得到. 元素X[i]是一个一维数组,其长度可由X[i].length得到.
例 测试数组
编写程序,读入6个整数,找出它们中的最大值,并 统计最大值出现的次数.
Example:TestArray.java
例 划分成绩等级
编写程序,读入学生分数,求最高分,然后根据下面 的规则指定等级:
如果分数>=best 如果分数>=best 如果分数>=best 如果分数>=best >=best 否则等级为F – – – – 10, 20, 30, 40, 等级为A 等级为B 等级为C 等级为D D
声明数组引用变量
语法
datatype[] arrayRefVar; 例如: double[] myList;
或者
datatype arrayRefVar[]; 例如: double myList[];
数组变量是引用类型的变量,声明数组变量并不分配 内存空间.
创建数组
使用new操作符创建数组.
arrayRefVar = new datatype[arraySize]; 例如: myList = new double[10];
不规则数组
二维数组的每个元素(数组)的长度可以不同. 创建二维数组时,可以只指定第一下标.二维数组的 每个元素为空,必须创建每个元素数组.
例如:
int[][] x = new int[5][]; x[0] = new int[5]; x[1] = new int[4]; x[2] = new int[3]; x[3] = new int[2]; x[4] = new int[1]; x[0] x[1] x[2] x[3] x[4] x
数组初始化
新创建的数组对象,其元素根据类型被设置为默认的 初始值.
数值类型为0 字符类型为'\u0000' 布尔类型为false 引用类型为null null
数组可以在声明后的花括号中提供初始值.
double[] myList = {1.9, 2.9, 3.4, 3.5} 或者 double[] myList; myList = new double[] {1.9, 2.9, 3.4, 3.5}
2 9 5 4 8 1 6
Example:SelectionSort.java
二维数组
声明数组引用变量
dataType[][] refVar;
创建数组并将引用赋值给变量
refVar = new dataType[rowSize][colSize];
在一条语句中声明和创建数组
dataType[][] refVar = new dataType[rowSize][colSize]; 或者 dataType refVar[][] = new dataType[rowSize][colSize];
Example:AssignGrade.java
复制数组
直接使用赋值语句不能实现数组的复制,结果是两个 数组引用变量指向同一个数组对象.
x: 1 copy y:1 基本类型 x : ref copy y : ref 数组类型 array
复制数组的方法
使用循环来复制每个元素 使用System.arraycopy方法 使用数组的clone方法
如果关键字比中间元素小,则在前一半数组中搜索; 如果关键字与中间元素相同,查找结束; 如果关键字比中间元素在,则在后一半数组中搜索.
Example:LinearSearch.java, BinarySearch.java
排序数组
选择排序算法:假设将数组按升序排列
算法
将列表中的元素最大值放在最后一个位置 将剩下元素的最大值放在倒数第二的位置 以此类推,直到剩下一个数为止.
例 分数计算
编写程序计算班级中每个学生的总分.假设分数保存 在三维数组中,数组的第1维代表学生,第2维代表 试卷,第3维代表试卷的一部分的成绩.
部分6 部分5 部分4 部分3 部分2 部分1 部分0 学生4 学生3 学生2 学生1 学生0
Example:TotalScore.java
�
Java程序设计
YANGLIN@BNUITC
第6章 数组
学习目标
理解数组的概念 掌握声明数组变量,创建数组,初始化数组 掌握如何访问数组元素 掌握向方法传递数组 了解如何复制数组 掌握搜索和排序算法 掌握多维数组的声明和创建
数组
数组(array)是相同类型变量的集合.
double[] myList = new double[10];
学生0 学生1 1 学生2 学生3 学生4 学生5 学生6 学生7 0 A D E C A B B E 1 B B D B B B B B 2 A A D A D E A E 3 C B A E C C C C 4 C C C D C C C C 5 D A B C D D D D 6 E E E E E E E E 7 E E E E E E E E 8 A A A A A A A A 9 D D D D D D D D
x[0][0] x[0][1] x[0][2] x[0][3] x[0][4] x[1][0] x[1][1] x[1][2] x[1][3] x[2][0] x[2][1] x[2][2] x[3][0] x[3][1] x[4][0]
例 给选择题评分
编写程序,给选择题评分.设有8个学生10个问题, 答案存储在一个二维数组中.每行记录一个学生的答 案.输出每个学生的评分结果.
增强的for循环(JDK 1.5)
JDK 1.5引入一个新的for循环,可以不用下标就可以 依次访问数组元素.语法:
for(elementType value : arrayRefVar) { } 例如
for(int i = 0; i < myList.length; i++) { sum += myList[i]; } for(double value : myList) { sum += value; }
X X[0] X[1] X[2] X.length is 3
X[2][0] X[2][1] X[2][2] X[2][3] X[2].length is 4 X[1][0] X[1][1] X[1][2] X[1][3] X[1].length is 4
X[0][0] X[0][1] X[0][2] X[0][3] X[0].length is 4
myList[0] myList[1] myList[2] myList[3] myList[4] myList[5] myList[6] myList[7] myList[8] myList[9] 5.6 4.5 3.3 13.2 4 34.33 34 45.45 99.993 1123 引用 myList
答案 D B D C C D A E A D
Example:GradeExam.java
例 使用数组计算所得税
美国的个人所得税根据纳税人情况和须纳税收入进行 计算.编写程序,用户输入纳税人情况和须纳税收入, 计算出2002年的所得税.
2002年美国个人所得税税率表
Example:ComputeTax.java
例 传递数组
编写两个方法交换数组中的两个元素.
swap方法交换两个int类型的参数 swapFirstTwoInArray方法交换数组参数的前两个元素
Example:TestPassArray.java
例 统计每个字符出现的次数
编写程序,完成以下任务
随机产生100个小写字母,并保存在一个字符数组中. 计算数组中每个字母出现的次数.
二维数组示意图
[0] [1] [2] [3] [4] [0] [1] [2] [3] int[][] matrix = new int[4][5] [0] [1] [2] [3] matrix[2][1] = 7 7 [0] [1] [2] [3] [4] [0] [1] [2] [0] 1 [1] 4 [2] 7 2 5 8 3 6 9