教案: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)898,‘c’,23

c)98.1341.234.3

答案:ac可以,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("S253Java内部测试成绩平均分是: " + 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(由教员让多位学员上机合作完成,下面的学员在纸上练习)

使用数组的步骤是什么?

 

 有一个数列:84212334412

 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种声明方式是什么?

如何引用数组中的元素?

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

考核点

数组的声明

数组的使用

平均值,最大值的算法

扩展部分:

 冒泡排序算法

学员问题汇总:

 暂无

作业:

 习题1197页至198页选择题

 习题2198页第1,2,3

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

 

你可能感兴趣的:(默然说话)