声明:由于版权等原因,本文隐藏了部分内容,由于造成的不便,请大家谅解。
如果你觉得本文对您有用,请跟贴,以示对作者的支持,谢谢。
授课教师:牟勇
课时:100分钟
l本章技能目标
n掌握数组的基本用法
n会使用数组解决简单问题
u求平均值
u求最大值,最小值
u排序
l本章重点
n定义和使用数组
n会排序,求最大值和最小值
l本章难点
n使用循环操作数组
l本章工作任务
升级Java应用程序HelloAccp,输入学员成绩
n统计本次考试平均分
n求出本次考试最高分
n本次考试排名
1.创建包mypackage.mywork,在包中创建类Welcome
添加一个方法sayHello(),提示输入姓名,然后输出“××,欢迎你!”
添加JavaDoc注释
什么情况下使用数组?
如何定义一个int数组?
怎样引用一个数组中的元素?
授课思路:
本章依次讲解3个问题:数组基础,创建和使用数组,数组应用
数组基础:讲解为什么需要数组,以及数组的结构。
创建和使用数组:首先讲解使用数组需要5步,然后结合例子分别讲解
数组应用:讲解如何求最值以及如何使用Arrays类的sort方法进行排序
教员最好现场演示,逐行敲打并解释代码。
为什么使用数组
提问:一次Java内部测试结束后,老师给令狐冲分配了一项任务,计算全班(30人)的平均分,请大家来帮助一下令狐少侠,给他写一个程序吧?
int stu1 = 95;
int stu2 = 89;
int stu3 = 79;
int stu4 = 64;
int stu5 = 76;
int stu6 = 88;
……
avg = (stu1+stu2+stu3+stu4+stu5…+stu30)/30
答案:代码如上。
提问:这个程序有什么问题?
答案:变量太多,太多的重复代码,如果计算的人数更多,真的不可想象。
提问:我们先来想想,在现实生活中是如何解决这类问题的。
生活案例:博物架:
解决方案:分类存放。
特征:每个物品都有一个固定的存放空间,每个空间有一个标识。
好处:易查找,易维护。
提问:那我们的计算机世界有没有类似的解决数据存储的方法呢?
答案:数组。
数组定义:
数组是一个变量,存储相同数据类型的一组数据。通过下标进行区别。
同一个数组变量,存储的数据类型都是相同的,它们都有同一个变量名,只通过下标来进行区别。
数组在内存中的存储
类似于博物架,把所有物品分类并且是集中存放相似,数组在内存中也是连续存放的。这样,在我们进行数据查找时,计算机的工作速度会非常快,因为CPU在查内存时不用东跳一下,西跳一下。而是连续迅速的完成工作。
小结:
提问:数据有什么好处?
答案:将数据集中,便于操作,提高效率。
提问:下列哪组数据能存储在数组中?数组的类型是什么?
a)“刘星”,“夏雨”,“夏雪”
b)8,98,‘c’,23
c)98.1,341.2,34.3
答案:a和c可以,b不行,因为它有其它的数据类型。
使用数组四步走
1、声明数组:int[] arr;
2、分配空间:arr=new int[5]
3、赋值:arr[0]=10
4、处理数据:arr[1]=arr[0]*8
数组声明:告诉计算机数据类型是什么
数组初始化:告诉计算机需要多大空间(分配几个格子)
数组赋值:往格子里放东西。
两种方式:
第一种:在声明时就放(硬编码)。如:int[ ] score = {89, 79, 76};或者写成int[ ] score = new int[ ]{89, 79, 76};
第二种:使用循环,由用户完成输入(动态赋值)
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++){
score[i] = input.nextInt();
}
使用数组求平均值:
题目:求5个学生的平均分:
答案1:正常思路(注意强调下标的使用)
int [ ] score = {60, 80, 90, 70, 85};
double avg;
avg = (score[0] + score[1] + score[2] + score[3] + score[4])/5;
答案2:使用循环(注意强调数组的length属性和累加的写法与变形)
int [ ] score = {60, 80, 90, 70, 85};
int sum = 0;
double avg;
for(int index = 0; index < score.length; index++){
sum = sum + score[index];
}
avg = sum / score.length;
引申:如何动态求得30名学生的平均分?
(引导学生,一步一步得出正确代码)
/**
*HelloAccp1_2.java
*计算S253班第一次Java内部测试的平均成绩
*/
package s1java.sg.chap8;
import java.util.Scanner;
public class HelloAccp1_2 {
/**
* @param args
*String[]
*/
public static void main(String[] args) {
//声明变量
int[] score = new int[10]; //成绩数组
int sum = 0; //成绩总和
double avg; //成绩平均值
//给数组动态赋值
System.out.println("请依次录入学生成绩:");
Scanner input = new Scanner(System.in);
for (int index = 0; index < score.length; index++) {
score[index] = input.nextInt();
}
//计算平均值
for (int index = 0; index < score.length; index++) {
sum = sum + score[index];
}
avg = sum / score.length;
//显示输出结果
System.out.println("S253班Java内部测试成绩平均分是:" + avg);
}
}
常见错误1:(教员应演示该错误)