题目描述&分析
/*
* 在唱歌比赛中,可能有多名评委要给选手打分,分数是【0-100】之间的整数。
* 选手最后得分为:去掉最高分、最低分后的平均分。
* 请编写程序能够录入多名评委的分数,并算出选手的最终得分。
*/
//分析
/*
* 方法入参需要传入评委的人数;
* 需要返回一个double类型的平均分
*/
代码实现
//功能函数
public static double avg(int num){
//评委人数<=0
if (num <= 0){
System.out.println("评委不存在");
return 0.0;
}
//定义一个动态数组,存储评委分数
double[] score = new double[num];
//从键盘录入分数并存储到数组中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < num; i++) {
System.out.println("请输入第" + (i + 1) + "个评委的分数:");
score[i] = sc.nextDouble();
}
/*
//找到数组中的最大值
double max = score[0];
for (int i = 1; i < score.length; i++) {
if (score[i] > max){
max = score[i];
}
}
//找到数组中的最小值
double min = score[0];
for (int i = 1; i < score.length; i++) {
if (score[i] < min){
min = score[i];
}
}
//计算数组中的数字的总和
double sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
*/
//性能优化---三次循环变一次
double max = score[0];
double min = score[0];
double sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
if (score[i] > max){
max = score[i];
}
if (score[i] < min){
min = score[i];
}
}
//计算平均值并返回
double avg = (sum - max - min) / (num - 2);
return avg;
}
测试程序
public static void main(String[] args) {
//test
System.out.println(avg(3));
}