前提:上一周是项目周,所以没有日常作业,今天恢复日常作业。
看到小新老师标志性的打卡,本以为是美好的一天,谁知道下面
这里我就发现事情不对,难道小新老师发现自己新买的老板椅被大雄搬到了老九君屋子里,毕竟大雄天天搞公众号拍马屁的功夫还是有一手的。
等待上午10点小新老师发完作业,我终于发现了这事没这么简单,先不说今天的作业他修改了三遍,就看这作业内容,内容如下:
果然事情没有这么简单,通过这个作业我们可以看出以下几点
- 张三当上了中国好声音的评委,但是这个张三竟然五音不全。他想表达什么?往后面看“于是张三打算从其他7个评委的打分中获取平均分来作为自己打的评分”,这明显就是划水啊,这让我不得不怀疑,小新老师想表达的意思是在他所在的公司里有个有背景的人工作划水,但又不好明说,难道是这个人把他的老板椅搬到了老九君屋子里?
- 仔细看一下样例输出,老九君8.5,四月0.00。表面上看小新老师想拍老九君马屁,其实不是这样的。我们仔细看题目“精确到小数点后两位”,什么意思?说明老九君的成绩看着高其实是无效的。这是成绩是谁给的呢?五音不全的张三!小新老师肯定是想告诉老九君,你找的那个天天划水的关系户,表面上看着对你不错,背地里坏的很。至于四月为什么是0.00,请看下图:
- 我们在来说说这道题,这也是让我疑惑的所在,按理说小新老师的老板椅被人搬走了和我们有什么关系?我们来分析下这道题。
“输入其他7个评委的打分,去掉最高和最低分后再计算平均分”这里的关键是找出最高分和最低分,所以我们要先把7个评委的打分放在一个数据容器里,这样方便我们对7个评委的数据进行操作,这个数据容器可以是数组或者集合
“精确到小数点后两位”这里涉及到数据输出格式的问题
先说把7个评委的分数放在哪?
数组:既可以存储基本数据类型,又可以存储引用数据类型,长度固定,不能自动增长,数据存储相同类型值。
集合:只能存储引用数据类型(对象),集合中存储基本数据类型时以包装类形式存储。长度是可变的。
//创建一个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;
//创建一个List集合
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();
还有特多集合可以被选择,所以只是这个一点上就有很多种写法,这明显就是在挖坑,我选择A写法他就说B对,我选择B写法,他就说C对,这是在迷惑我们么?还是题是张三出的,他想在这里把张三推出来?
在看后面
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);
保留二位小数部分也有很多种写法,所以这道题根本没有标准答案,评分完全看他的心情,难道这只是他的一种发泄?
我看出这道题疑点太多,不得不向小新老师询问,结果:
可见张三就在我们群里,小新老师为了自保可能会出卖看出问题的我,我不得不把这件事告诉大雄,来求得帮助。