1、,第7章 数组,数组 前几章节内容总结及练习 循环结构进阶 类和对象 类的无参方法 课堂项目练习 带参数的方法 字符串,课堂项目练习 抽象和封装 继承 多态 接口 课堂项目练习 异常 集合框架 JDBC JSP。,本章任务,统计本次考试平均分 求出本次考试最高分 实现数组排序 复制数组信息,本章目标,掌握数组的基本用法 会应用数组解决简单问题 理解基本数据类型和引用数据类型,为什么需要数组2-1,int stu1 = 95; int stu2 = 89; int stu3 = 79; int stu4 = 64; int stu5 = 76; int stu6 = 88; avg = (stu
2、1+stu2+stu3+stu4+stu5+stu30)/30,30个变量太繁琐,1、Java考试结束后,老师给张浩分配了一项任务,让他计算全班(30人)的平均分,为什么需要数组2-2,列表中的内容是否可以按照如右图所示的方式来存储呢?,可以,这就是数组!,生活案例:购物列表,数组是一个变量,存储相同数据类型的一组数据,什么是数组3-1,声明一个变量就是在内存空间划出一块合适的空间 声明一个数组就是在内存空间划出一串连续的空间,什么是数组3-2,数组的结构和基本要素 标识符:数组的名称,用于区分不同的数组 数组元素:向数组中存放的数据 元素下标:对数组元素进行编号 元素类型:数组元素的数据类型
3、,什么是数组3-3,数组只有一个名称,即标识符 元素下标标明了元素在数组中的位置,从0开始 数组中的每个元素都可以通过下标来访问 数组长度固定不变,避免数组越界,1、使用数组的好处是什么?2、下列哪组数据能存储在数组中?数组的类型是什么? “刘星”,“夏雨”,“夏雪” 8,98,“c”,23 98.1,341.2,34.3,数组中的所有元素必须属于相同的数据类型,String型,double型,小结1,使用数组四步走:1、声明数组2、分配空间3、赋值4、处理数据,int a;,a = new int5;,a 0 = 8;,a 0 = a0 * 10;,a,8,80,a0,如何使用数组,int
4、score1; /Java成绩 int score2 ; /C#成绩 String name; /学生姓名,声明数组: 告诉计算机数据类型是什么,1,数据类型 数组名 ;,数据类型 数组名 ;,声明数组,声明数组时不规定数组长度,score = new int30; avgAge = new int6; name = new String30;,30,分配空间: 告诉计算机分配几个连续的空间,2,数据类型 数组名 = new 数据类型大小 ;,声明数组并分配空间,分配空间,score0 = 89; score1 = 79; score2 = 76; ,赋值:向分配的格子里放数据,30,scor
5、e0,score1,score2,89,79,76,太麻烦!能不能一起赋值?,3,数组赋值,方法1: 边声明边赋值方法2:动态地从键盘录入信息并赋值,解决,int score = 89, 79, 76;,Scanner input = new Scanner(System.in); for(int i = 0; i 30; i +)scorei = input.nextInt(); ,int score = new int 89, 79, 76;,数组赋值,不能指定数组长度,int score = 60, 80, 90, 70, 85; double avg; avg = (score0 +
6、score1 + score2 + score3 + score4)/5;,int score = 60, 80, 90, 70, 85; int sum = 0; double avg; for(int i = 0; i score.length; i+)sum = sum + scorei; avg = sum / score.length;,成绩单,访问数组成员:使用“标识符下标”,访问成员,数组的length属性,对数据进行处理:计算5位学生的平均分,4,处理数据,public static void main(String args) int scores = new int5; /
7、成绩数组int sum = 0; /成绩总和Scanner input = new Scanner(System.in);System.out.println(“请输入5位学员的成绩:“);for(int i = 0; i scores.length; i+)scoresi = input.nextInt();sum = sum + scoresi; /成绩累加System.out.println(“平均分是:“ + (double)sum/scores.length);,回顾问题1:计算全班学员的平均分,使用数组求平均分,public class ErrorDemo1 public stat
8、ic void main(String args)int score = new int ;score0 = 89;score1 = 63;System.out.println(score0); ,编译出错,没有写明数组的大小,常见错误3-1,public class ErrorDemo2 public static void main(String args) int scores = new int2;scores0 = 90;scores1 = 85;scores2 = 65;System.out.println(scores2); ,编译出错,数组越界,常见错误3-2,public s
9、tatic void main(String args)int score = new int5;score = 60, 80, 90, 70, 85;int score2;score2 = 60, 80, 90, 70, 85; ,编译出错,创建数组并赋值的方式必须在一条语句中完成,常见错误3-3,小结2,使用数组的步骤是什么?有一个数列:8,4,2,1,23,344,12 循环输出数列的值 求数列中所有数值的和 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数,参考代码1,参考代码2,参考代码3,指导显示商品名称,训练要点: 数组的使用 需求说明: 在控制台显示5件特价商品名称
10、实现思路: 1、创建数组存储商品名称 2、遍历数组输出商品名称,讲解需求说明,完成时间:10分钟,练习购物金额结算,需求说明: 以表格的形式输出5笔购物金额及总金额,完成时间:25分钟,共性问题集中讲解,常见调试问题及解决办法 代码规范问题,共性问题集中讲解,使用java.util.Arrays类 java.util包提供了许多工具类 Arrays类提供操作数组的方法,例排序、查询 Arrays类的sort()方法: 对数组进行升序排列,Arrays.sort(数组名);,数组排序2-1,2、循环录入5位学员成绩,进行升序排列后输出结果,import java.util.*; /导入包int
11、scores = new int5; /成绩数组Scanner input = new Scanner(System.in);System.out.println(“请输入5位学员的成绩:“);for(int i = 0; i scores.length; i+)scoresi = input.nextInt();Arrays.sort(scores); System.out.print(“学员成绩按升序排列:“);for(int i = 0; i scores.length; i+)System.out.print(scoresi + “ “);,数组中的元素被重新排列,循环录入学生成绩并存
12、储在数组中,循环输出数组中的信息,数组排序2-2,练习字符逆序输出,需求说明: 将 一组乱序的字符进行排序 进行升序和逆序输出,完成时间:15分钟,打擂台,擂台,求最大值3-1,3、从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分,根据打擂台的规则:,max = stu0 ; if (a1max )max=a1 ; if (a2max )max=a2 ; if (a3max )max=a3 ; ,使用循环 来解决,求最大值3-2,/计算成绩最大max = scores0;for(int i = 1; i max)max = scoresi;System.out.println(“考试
13、成绩最高分为:“ + max);,循环打擂,使用max存储擂主初始值:第一个元素为擂主,求最大值3-3,练习求最低价格,需求说明: 求出4家店的最低手机价格,完成时间:15分钟,基本数据类型的深入理解2-1,4、张浩和李明去年身高都是170cm,今年李明长到了180cm,张浩没有变化,输出去年和今年两人身高定义两个变量保存身高 修改变量的值 输出变量的值,基本数据类型的深入理解2-2,int heightZhang = 170; int heightLi = heightZhang; System.out.println(“去年-张浩的身高是:“ + heightZhang +“, 李明的身高
14、是:“ + heightLi);heightLi = 180;System.out.println(“今年-张浩的身高是:“ + heightZhang +“, 李明的身高是:“ + heightLi);,heightZhang,170,170,heightLi,180,不同的变量会分配不同的存储空间,改变一个变量值不会影响另一个变量值,引用数据类型的深入理解3-1,5、张浩和李明去年身高与体重均为170cm和60kg,李明今年身高和体重变为180cm和70kg,张浩无变化。输出两人的身高和体重采用和上一个示例相同的思路看是否可行,引用数据类型的深入理解3-2,int infoZhang =
15、new int 170,60; int infoLi = infoZhang; infoLi0 = 180; /今年李明的身高变为180 infoLi1 = 70; /今年李明的体重变为70 ,infoZhang,0x2a486c,0x2a486c,infoLi,对引用数据类型,赋值是把原对象的引用传递给另一个引用,两个引用指向同一块内存空间,引用数据类型的深入理解3-3,int infoZhang = new int 170,60; int infoLi = new int2; for(int i = 0; i infoZhang.length; i+)infoLii = infoZhangi; infoLi0 = 180; /今年李明的身高变为180 infoLi1 = 70; /今年李明的体重变为70 ,infoZhang,0x2a486c,0x2a679d,infoLi,数组元素有默认值,练习更新会员积分,需求说明: 将原有积分进行备份,然后赠送每位会员500积分,编写程序输出积分情况,完成时间:20分钟,总结,数组有哪些特点? 使用数组的四个步骤? 如何实现数组的排序? 基本数据类型和引用数据类型在内存分配上有什么不同?,