实现功能:n个评委打分,运动员的成绩是n个成绩去掉一个最高分和一个最低分,剩下的n-2个分数的平均分就是最后得分。
使用一维数组实现打分功能,并找出打出最高分和最低分的裁判,打分水平最好和最坏的裁判;
详细代码和代码注解如下:
/* * 功能:跳水比赛,评委打分。 * 运动员的成绩是n个成绩去掉一个最高分和一个最低分, * 剩下的n-2个分数的平均分就是最后得分。 * 使用一维数组实现打分功能,并找出打出最高分和最低分的裁判,打分水平最好和最坏的裁判 * 作者:zyj0813 */ package com.home1; import java.io.*; public class Home1_1 { public static void main(String[] args) { Judge judge=new Judge(); System.out.println(judge.lastFen()); //打印裁判时,直接调用类中的最高分和最低分的下标的函数,这里注意的是数组中的下标从0开始,裁判的下标要加1,这里加1一定要和调用的函数括起来。 System.out.println("最低分裁判:"+(judge.getLowFenIndex()+1)); System.out.println("最高分裁判:"+(judge.getMaxFenIndex()+1)); System.out.println("最好打分水平的裁判:"+(judge.getbest()+1)); System.out.println("最差打分水平的裁判:"+(judge.getworst()+1)); } } //创建一个评分类 class Judge { //定义一个可以存放8个数的数组 float[] fens=null; int size=4; //构造函数 public Judge() { fens=new float[size]; //初始化.从键盘输入裁判的打分分数,使用一个Buffer流来输入,下面的try catch抛出异常,避免输入的成绩不是数字。 InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); try{ for(int i=0;i<fens.length;i++) { System.out.println("请输入第"+(i+1)+"裁判的成绩"); fens[i]=Float.parseFloat(br.readLine()); } }catch(Exception e){ e.printStackTrace(); }finally{ try { br.close();//通过finally来结束数据流,这里也有一个异常要抛出。 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
//得到最好评委 public int getbest() { float lastFen=this.lastFen(); //先认为第一个评委最好的水平 int bestIndex=0; //评委打的分与最后得分分数的差值的绝对值 float temp=Math.abs(fens[0]-lastFen); for(int i=1;i<fens.length;i++) { if(temp>=Math.abs(fens[i]-lastFen)) { bestIndex=i; temp=Math.abs(fens[i]-lastFen); } } return bestIndex; } //得到最差评委 public int getworst() { float lastFen=this.lastFen(); //先认为第一个评委是最差的水平 int worstIndex=0; //评委打的分与最后得分分数的差值的绝对值 float cai=Math.abs(fens[0]-lastFen); for(int i=1;i<fens.length;i++) { if(cai<=Math.abs(fens[i]-lastFen)) { worstIndex=i; cai=Math.abs(fens[i]-lastFen); } } return worstIndex; }
//得到一个运动员的最后得分 public float lastFen() { float lastFen=0; float allFen=0; int minIndex=this.getLowFenIndex(); int maxIndex=this.getMaxFenIndex(); for(int i=0;i<fens.length;i++) { if(i!=minIndex&&i!=maxIndex) { allFen+=fens[i]; } } return allFen/(fens.length-2); } //1、去掉最低分(找到下标) public int getLowFenIndex() { //选择法 //认为第一个是最低分 float minFen=fens[0]; int minIndex=0; for(int i=1;i<fens.length;i++) { if(fens[i]<minFen) { minFen=fens[i]; minIndex=i; } } return minIndex; } //2、去掉最高分(找下标),也代表裁判的下标 public int getMaxFenIndex() { //选择法 //认为第一个是最低分 float maxFen=fens[0]; int maxIndex=0; for(int i=1;i<fens.length;i++) { if(fens[i]>maxFen) { maxFen=fens[i]; maxIndex=i; } } return maxIndex; } }