題目:
編寫一個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 }