综艺节目打分计算问题
综艺节目现场专家打分时,要求去掉一个最高分,再去掉一个最低分,然后计算剩余打分的平均值
输入格式:
固定为1行,为每个评委给出的分数,范围【0-100】正整数,元素之间使用空格分开,元素个数【3-100】
输出格式:
按要求计算出的平均值的正整数【如果有小数部分,直接舍弃】
输入样例:
在这里给出一组输入。例如:
50 80 70 90 60
输出样例:
在这里给出相应的输出。例如:
70
关于这道题循环自然可以,不过我喜欢用泛型。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
public static void main(String []args) {
ArrayList<Integer> grades=new ArrayList<Integer>();
Scanner input=new Scanner(System.in);
String grade=input.nextLine();
String gra[]=grade.split(" ");
for(int i=0;i<gra.length;i++){
grades.add( Integer.valueOf(gra[i]).intValue());
}
Collections.sort(grades);
int sum=0;
grades.remove(0);
grades.remove(gra.length-2);//A
for(Integer i:grades) {
sum+=i;
}
System.out.println(sum/grades.size());
}}
这里有几个需要注意的点:
- 由于输入是以字符串输入,并且相邻数字之间以空格隔开,所以我们可以用split()方法将他们切割存储在数组中,但是此时他们仍然是以字符串的 形式存储,所以这里我们就要用到
Integer.valueOf(gra[i]).intValue();
即将字符串数组中的元素转换为整型。
- 由于需要去掉最高分和最低分,所以用到Collections.sort();方法,将元素按照升序排列,然后再用remove()方法去掉泛型中第一个和最后一个元素即可。
- A处代码也可以改成 grades.remove(grades.size());即可删除最后一个元素。关于gra.length-2因为数组下标从0开始计数!容器也是!!