编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类。Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分;School 中计算平均分的方法是所有科目的分数之和除以总科目数。 要求:定义ComputerAv

题目:

编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。

定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类。

Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分;

School 中计算平均分的方法是所有科目的分数之和除以总科目数。

要求:定义ComputerAverage的对象为上转型对象,并调用重写的方法averge。 

题目用到:1.方法的多态

思想过程:本来想用动态数组,即ArrayList,但是后来用动态数组做形参传给普通数组时出了问题,因为ArrayList实质是链表,需要用到toArray.虽然我找到了方法但还是不会用.

这里由用户指定数组大小a,再键入分数可能更直观方便.

以下是代码:

 

 1 import java.util.Scanner;
 2 abstract class ComputerAverage{
 3 abstract double average(int a,double []data);
 4 }
 5 class Gymnastics extends ComputerAverage{
 6 private double avg,max=0,sum=0;
 7 Gymnastics(){    
 8 }
 9 double average(int a,double []data){
10 double min=data[0];        //最开始我把min的初值也定义为0,但是如果一组数的最小值比0大,那永远min=0,没有意义.所以把min定为首元素值
11 for(int i=0;i<a;i++){
12 if(data[i]>max)//找出最大值
13 max=data[i];
14 if(data[i]<min)//找出最小值
15 min=data[i];
16 sum+=data[i];
17 }
18 avg=(sum-max-min)/(a-2);
19 return avg;
20 }
21 }
22 class School extends ComputerAverage{
23 private double sum,avg;
24 School(){    
25 }
26 double average(int a,double []data){
27 for(int i=0;i<a;i++)
28 sum+=data[i];
29 avg=sum/a;
30 return avg;
31 }
32 }
33 public class Test5_1 {
34 private static Scanner input;
35 public static void main(String args[]){
36 int a;
37 input=new Scanner(System.in);
38 System.out.println("Please enter the number of subjects:");
39 a=input.nextInt();
40 double data[] = new double[a];
41 System.out.println("Please enter grade:");
42 for(int i=0;i<a;i++)
43 data[i]=input.nextDouble();
44 ComputerAverage avg;
45 avg=new Gymnastics();
46 System.out.println(avg.average(a,data));
47 avg=new School();                方法的多态:运行时根据具体对象类型决定函数调用
48 System.out.println(avg.average(a,data));
49 }
50 }

 

posted @ 2017-11-05 11:02  WETYUIOASHZXCVBNM  阅读(2732)  评论(0编辑  收藏  举报