教案:Java第8章 数组

声明:由于版权等原因,本文隐藏了部分内容,由于造成的不便,请大家谅解。

如果你觉得本文对您有用,请跟贴,以示对作者的支持,谢谢。

授课教师:牟勇

课时:100分钟

l 本章技能目标

n掌握数组的基本用法

n会使用数组解决简单问题

u 求平均值

u 求最大值,最小值

u 排序

l 本章重点

n定义和使用数组

n会排序,求最大值和最小值

l 本章难点

n使用循环操作数组

l 本章工作任务

升级Java应用程序HelloAccp,输入学员成绩

n统计本次考试平均分

n求出本次考试最高分

n本次考试排名

回顾上一章: [5分钟]

1. 创建包mypackage.mywork,在包中创建类Welcome

添加一个方法sayHello(),提示输入姓名,然后输出“× ×,欢迎你!”

添加JavaDoc注释

预习检查: [5分钟]

什么情况下使用数组?

如何定义一个int数组?

怎样引用一个数组中的元素?

课程知识点讲解:

授课思路:

本章依次讲解3个问题:数组基础,创建和使用数组,数组应用

数组基础:讲解为什么需要数组,以及数组的结构。

创建和使用数组:首先讲解使用数组需要5步,然后结合例子分别讲解

数组应用:讲解如何求最值以及如何使用Arrays类的sort方法进行排序

教员最好现场演示,逐行敲打并解释代码。

数组基础:[10分钟]

为什么使用数组

提问:一次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不行,因为它有其它的数据类型。

创建和使用数组:[30分钟]

使用数组四步走

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();

}

数组应用:[40分钟]

使用数组求平均值:

题目:求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:(教员应演示该错误)

public class HelloAccp2{

public static void main(String[ ] args){

int[ ] score = new int[ ];

score[0] = 89;

score[1] = 63;

System.out.println(score[0]);

}

}

答案:数组必须在声明时就确定大小。

常见错误2:(教员应演示该错误)

public class HelloAccp3{

public static void main(String[ ] args){

int[ ] score = new int[2];

score[0] = 89;

score[1] = 63;

score[2] = 45;

System.out.println(score[2]);

}

}

答案:数组下标越界。

常见错误3:(教员应演示该错误)

public static void main(String[ ] args){

int[ ] score = new int[5];

score = {60, 80, 90, 70, 85};

int[ ] score2;

score2 = {60, 80, 90, 70, 85};

}

答案:数组声明及初始化应在一行上完成(不能打分号)

基本数据类型的数组元素缺省值为0

public class HelloAccp4{

public static void main(String[ ] args){

int[ ] score = new int[3];

System.out.println(score[1]);

}

}

小结2:(由教员让多位学员上机合作完成,下面的学员在纸上练习)

使用数组的步骤是什么?

有一个数列:8,4,2,1,23,344,12

1)循环输出数列的值

2)求数列中所有数值的和

3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数

求最大值:

题目:从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分

引入生活案例,打擂台的规则:

有1人站在擂台上

第2个人和他比武。如果比他强,则留在擂台上。

依次类推,第3个人和擂台上的人比武,谁赢了谁就是擂主-老大!

根据这个思路,引导学生写出如下代码:

max = stu[0] ;

if (a[1]>max ){

max=a[1] ;

}

if (a[2]>max ){

max=a[2] ;

}

if (a[3]>max ){

max=a[3] ;

}

……

很明显,可以使用循环:(引导学员逐步写出代码)

//计算成绩最大值

max = score[0];

for (int index = 1;index < 5;index++) {

if (score[index] > max) {

max = score[index];

}

}

System.out.println("本次考试的五位学生的最高分是: " + max);

小结3:

小明要去买一部手机,他询问了4家店的价格,分别是2800元,2900元,2750元和3100元,显示输出最低价(由几位学员合作上机,其它学员在纸上写)

排序:

循环录入5位学员成绩,进行升序排列后输出结果

讲解要点:使用java.util.Arrays类

java.util包提供了许多存储数据的结构和有用的方法

Arrays类提供许多方法操纵数组,例如:排序,查询

Arrays类的sort()方法: 对数组进行升序排列

小结4:

有一列乱序的字符,‘a’,‘c’,‘u’,‘b’,‘e’,‘p’,‘f’,‘z’,排序并按照英文字母表的逆序输出

char list[ ] = {‘a’,’c’,’u’,’b’,’e’,’p’,’f’,’z’};

Arrays.sort(list);

for (int i = list.length – 1; i >= 0; i– ) {

System.out.println(list[i]);

}

答案讲解要点:主要是逆序输出的循环怎么写(有条件的班级,教员也可以引导学员自己写出代码)。

本章总结 [10分钟]

数组的优点是什么?

数组的3种声明方式是什么?

如何引用数组中的元素?

求数列的平均值、最大值以及排序的方法?

考核点

数组的声明

数组的使用

平均值,最大值的算法

扩展部分:

冒泡排序算法

学员问题汇总:

暂无

作业:

习题1:197页至198页选择题

习题2:198页第1,2,3题

习题3:预习第九章,试做课后的选择题

君子当权积福,小人仗势欺人。

教案:Java第8章 数组

相关文章:

你感兴趣的文章:

标签云: