接口的实现

题目:OK歌手打分程序

设计一接口,为卡拉ok歌手打分。设计两种实现,实现两种打分方法:

(1) 九个评委,以百分制打分,去掉一个最高分与一个最低分。计算出的平均分保留一位小数。

(2) 九个评委,以百分制打分,计算出的平均分保留一位小数。

(3) 九个评委,分段打分,级别为A+, A,B+,B,C+,C,D+,D去掉一个最高分与一个最低分。折算出的平均分为上述8个级别。

分析:java的接口问题。本质就是一个接口实现三个不同打分实例。

按照题目的要求设置对应的打分即可。前两种较为简单,第三种就通过字符和数字的转换就可以解决。

接口类

public interface Grade{
	public abstract void getScore();//得到分数
	public abstract double Score();//计算分数,double类型
}

第一种打分类

import java.util.*;
import java.util.Arrays;
import java.util.Scanner;
public class Judge_01 implements Grade{
	int[] scores=new int[10];
	int score;
	public void getScore(){//得到分数
		Scanner reader=new Scanner(System.in);
		System.out.println("请输入第一种评分评委的分数:");
		for(int i=0;i<9;i++){
			scores[i]=reader.nextInt();
		}
	}
	public double Score(){//计算分数
		Arrays.sort(scores,0,8);//排序
		for(int i=1;i<8;i++){//去掉首尾,算总分数
			score+=scores[i];
		}
		double t=(double)score/7;
		//System.out.println("---分数的多位数"+t);
		return t;	
	}
}

第二种打分类

import java.util.Scanner;
public class Judge_02 implements Grade{
	int[] scores=new int[10];//储存分数
	int score;//总分数
	public void getScore(){//输入分数
		Scanner reader=new Scanner(System.in);
		System.out.println("请输入第二种评分评委的分数");
		for(int i=0;i<9;i++){
			scores[i]=reader.nextInt();
		}
	}
	public double Score(){//计算得分,返回double类型
		for(int i=0;i<9;i++){
			score+=scores[i];
			}
		double t=(double)score/9;
		//System.out.println("---分数的多位数"+t);
		return t;
	}
}

第三种打分类

import java.util.Scanner;
public class Judge_03 implements Grade{
	int[] scores=new int[10];//储存分数
	String str;//储存字母
	double score;//总分数
	public void getScore(){//输入分数
		Scanner reader=new Scanner(System.in);
		System.out.println("请输入第三种评分评委的分数");
		for(int i=0;i<9;i++){
			str=reader.next();//以一个整数作为分段的数值,进行转换。
			if(str.compareTo("A+")==0){//因为switch不能使String类型,所以只能用ifelse
				scores[i]=7;
			}else if(str.compareTo("A-")==0){
				scores[i]=6;
			}else if(str.compareTo("B+")==0){
				scores[i]=5;
			}else if(str.compareTo("B-")==0){
				scores[i]=4;
			}else if(str.compareTo("C+")==0){
				scores[i]=3;
			}else if(str.compareTo("C-")==0){
				scores[i]=2;
			}else if(str.compareTo("D+")==0){
				scores[i]=1;
			}
		}
		/*System.out.println("验证对应的数值:");//检验对应的字符串的数值是否正确
		for(int i=0;i<9;i++){
		System.out.println(scores[i]);
		}*/
	}
	public double Score(){//计算得分,返回double类型
		for(int i=0;i<9;i++){
			score+=scores[i];
			}
		score/=9;
		//System.out.println("数值得分为:"+score);
		return score;
	}
	public String charScore(double score){
		switch((int)score){//double转换成int类型,直接把小数位丢掉,因为只有满足对应整数才算是这一阶段。
			case 1:str="D+";break;
			case 2:str="C-";break;
			case 3:str="C+";break;
			case 4:str="B-";break;
			case 5:str="B+";break;
			case 6:str="A-";break;
			case 7:str="A+";break;

			}
		return str;
	}
}

main类

import java.util.Scanner;
import java.util.*;
public class Sing{
	public static void main(String args[]){
		Judge_01 s1=new Judge_01();//定义相应的对象
		Judge_02 s2=new Judge_02();
		Judge_03 s3=new Judge_03();
		s1.getScore();//输入相应的分数
		s2.getScore();
		s3.getScore();
		System.out.println("第一种评分所得的分数为:");
                            	System.out.println(String.format("%.1f",s1.Score()-0.05));//四舍五入输出一位小数
		System.out.println("第二种评分所得的分数为:");	
		System.out.println(String.format("%.1f",s2.Score()-0.05));
		System.out.println("第三种评分所得的分数:");
		double t=s3.Score();
		String t1=s3.charScore(t);
		System.out.println(s3.charScore(s3.Score()));
	}
}

还可以进一步修改,看如何实现只要输入一次打分就可以。
应该将输入分数的方法设置在mian类,然后接口类只包含计算分数的方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值