体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均分,而学校考察一个班级的某科目考试时是计算全班同学的平均成绩。Gymnastics类和School类都实现了ComputerAverage接口,但实现的方式不同。
package main;
interface ComputerAverage {
public double average(double x[]);
}
class Gymnastcs implements ComputerAverage{
public double average(double x[]){
int count=x.length;
double aver=0,temp=0;
for(int i=0;i<count;i++){
for(int j=i;j<count;j++){
if(x[j]<x[i]){
temp=x[j];
x[j]=x[i];
x[i]=temp;
}
}
}
for(int i=1;i<count-1;i++){
aver=aver+x[i];
}
if(count>2)
aver=aver/(count-2);
else
aver=0;
return aver;
}
}
class School implements ComputerAverage {
public double average(double x[]) {
int count = x.length;//定义int型局部变量count,并用数组x[]的长度为其赋。
double aver = 0;// 定义double型局部变量aver,并赋值为0。
for (int i = 0; i < count; i++) {
aver += x[i];
}
{//使用for循环将数组元素x[i]的值累加,结果赋值给aver。
if (count > 0)
aver = aver / count;//用aver除以count求得数组x[]的元素的算术平均值,结果给aver。
else
aver = 0;
return aver;
}//重写average方法,返回数组x[]的元素的算术平均值
}
public static class Estimator {
public static void main(String[] args) {
double a[] = {9.89, 9.88, 9.99, 9.12, 9.69, 9.76, 8.97};
double b[] = {89.56, 78.90, 100, 77, 56, 36, 79, 98};
ComputerAverage computer;//定义ComputerAverage接口类型变量computer
computer = new Gymnastcs();//用Gymnastcs类的对象的引用赋值给computer
double result = computer.average(a);//computer调用average(double x[])方法,将数组a
//传递给参数x
System.out.printf("%n");
System.out.printf("体操选手最后得分:%5.3f\n", result);
computer = new School();
result = computer.average(b); //computer调用average(double x[])方法,将数组b
//传递给参数x
System.out.printf("班级考试平均分数:%-5.2f\n", result);
}
}
}
运行结果截图: