JAVA小程序--裁判评分系统

实现功能: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;
	}
}

猜你喜欢

转载自blog.csdn.net/zyj0813/article/details/78308610