每日作业1207

今日作业
打分系统
张三当上了中国好声音的评委,
但五音不全的他根本听不出来歌手唱的怎么样, 于是张三打算从其他7个评委的打分中获取平均分来作为自己打的评分,
设计一个程序, 输入其他7个评委的打分, 去掉最高和最低分后, 再计算平均分(精确到小数点后两位)
输入:
7个数字和一串字符串, 表示其他评委的打分和歌手名
输出:
一串字符串和一个数字, 表示歌手名和张三的打分
样例输入:
10 9.5 9 8.5 8 7.5 0
laojiujun
样例输出:
laojiujun: 8.5
样例输入:
10 0 0 0 0 0 0
siyue
样例输出:
siyue: 0.00
请提交源码及运行结果的截图
(鼓励增加创意哦,好的创意额外加分)

题目分析:

  1. “输入其他7个评委的打分,去掉最高和最低分后再计算平均分”这里的关键是找出最高分和最低分,所以我们要先把7个评委的打分放在一个数据容器里,这样方便我们对7个评委的数据进行操作,这个数据容器可以是数组或者集合
  2. “精确到小数点后两位”这里涉及到数据输出格式的问题
    针对上面的两点我们分别展开讨论:

先讨论第一点

首先我们要先面对数据容器的选择(当然你也可以不用数据容器直接上大段的if语句)
数组:既可以存储基本数据类型,又可以存储引用数据类型,长度固定,不能自动增长,数据存储相同类型值。
集合:只能存储引用数据类型(对象),集合中存储基本数据类型时以包装类形式存储。长度是可变的。
因为集合功能太强大,所以我们先用数组存储并求出平均值

//创建一个double类型的数组1
double[] str = {9.1,10.2,8.5,6.3,11.4,7.8,12.0};
		double min = Double.MAX_VALUE;  //最小值
		double max = Double.MIN_VALUE;  //最大值
		double sum = 0; //总值
		for (int i = 0; i < str.length; i++) {
			if(str[i] < min) {
				min = str[i];
			}
			
			if(str[i] > max) {
				max = str[i];
			}
			sum += str[i];
		}
		double avg = (sum - min - max)/str.length; 
		//总值减去最大值减去最小值求出平均分
		//平均平均几个人有歧义啊
//创建一个double类型的数组2
double[] str = {9.1,10.2,8.5,6.3,11.4,7.8,12.0};
double sum = 0;
		for (int i = 0; i < str.length; i++) {
			sum += str[i];
		}
Arrays.sort(str); //按升序排列数组
double min = str[0];
double max = str[str.length-1];
double avg = (sum - min - max)/str.length;

使用集合存储并求出平均值

//创建一个经常使用的ArrayList集合
List<Double> list = new ArrayList<>();
		double[] str = { 9.1, 10.2, 8.5, 6.3, 11.4, 7.8, 12.0 };
		for (int i = 0; i < str.length; i++) {
			list.add(str[i]);
		}    //忽略上面这段脱裤子放屁的代码,只是为了给集合加元素方便
		double sum = 0;
		for (double d : str) {
			sum += d;
		}
		double min = Collections.min(list); //使用集合自带的静态方法求最大值最小值
		double max = Collections.max(list); //当然也可以选用遍历集合的方式
		double avg = (sum - min - max) / list.size();

集合体系太大就不说了,在说第二点精确到小数点后面两位

//方法一
		System.out.println(avg);
		//打印结果6.714285714285713
		avg =(double)Math.round(avg * 100) / 100; 
		System.out.println(avg);
		//打印结果6.71
		avg =(double)Math.round(avg * 1000) /1000;
		System.out.println(avg);
		//打印结果6.714
		//此函数返回值为int 或 long 所以要加double转换
//方法二 
BigDecimal bg = new BigDecimal(avg);
avg = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//不会四舍五入直接舍去
或者
String str2 = String.format("%.2f", avg);
//四舍五入保留两位小数
public static void main(String[] args) {
		List<Double> list = new ArrayList<Double>();
		Scanner input = new Scanner(System.in);
		for (int i = 0; i < 7; i++) {
			System.out.println((i + 1) + "号评委打分");
			 double score = input.nextDouble();
			 list.add(score);
		}
		
		double min = Collections.min(list);
		double max = Collections.max(list);
		double sum = 0;
		
		for (Double s : list) {
			
			sum += s;
		}
		
		double avg = (sum - min - max) / (list.size() - 2);
		System.out.printf("laojiujun:%.2f", avg);
		input.close();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值