用偏实战案例(滑手赛程管理系统)来梳理Java对象关系(三)

说在前面

前两篇文章回顾:《第一篇》 《第二篇》
在上次完成大体框架实现后,我们还实现了SkaterService滑手服务的细节,可以说已经为比赛做好了前期准备,接下来这篇文章,我们将按照整个比赛的流程,完成包括报名与公式、正式比赛与文字直播,以及最后获胜选手公布在内的需求细节。

(本文偏新手向,逻辑实现程度较简单,以巩固对象关系和提高结构分析能力为主要目的,本人能力有限,知识浅薄,文章如有错误,欢迎指正啊!)

思维导图

思维导图

需求如下

测试场景:
目前有四位滑手参赛,如下表格:

姓名 性别 年龄 国籍
Eric male 19 America
Sean male 16 America
Leticia female 14 Brazil
ZhangSan male 17 China

为方便测试,我们为他们统一提供滑板:

板面 支架 轮子 砂纸 轴承
Zero Thunder Spitfire Mob Bones

参赛前他们会从以下参赛要求的招式中练习,努力过后他们最终只能够学会三个,成功率均为90%,而没学招式只有10%的成功率(学会招式为随机三个):

招式名称 脚位 转体 基本招
normal frontside hardflip normal frontside hardflip
nollie backside Kickflip nollie backside Kickflip
fakie frontside bigspin fakie frontside bigspin
switch 360 ollie switch 360 ollie

凭借努力,他们的能力在赛前就被赞助商所发现,以下赞助商愿意为他们提供帮助
(每人都能获得最多三个赞助):

NIKE-SB 耐克滑板 HUF 街头服饰 SKALUTE 向滑板致敬 7-PE 国家赞助七波辉

比赛的安排及规则如下:

赛事名称 地点 时间
SLS街头联盟 芝加哥 2020年5月14日

规则:根据赛事要求的四个招式,每名参赛者按报名顺序,抽签决定所需完成的招式。若失败则直接出局,成功的则留下。如果多名选手都完成招式,则进行下一轮同样的比拼,直到决出最后留下的选手即为胜利者。

测试结果要求:

  1. 赛前公示比赛赛事信息,以及参赛选手的个人信息。
  2. 进行赛程的文字直播。

Go on!!

2、赛程服务实现:

首先进行类似模型填充的操作,这些变量用于储存接下来赛程中要用的数据。

	public class CompetitionServiceImpl implements CompetitionService {
   
		// 储存报名参加比赛的选手名单
	    private static List<Skater> competitors = new ArrayList<>();
		// 储存赛事相关数据
	    private Competition competition;
		// 滑手服务用来处理比赛中选手会涉及的滑手相关操作
	    private final SkaterService skaterService;
	    // 通过构造函数来引入滑手服务
		public CompetitionServiceImpl(SkaterService skaterService) {
   
	        this.skaterService = skaterService;
	    }
	    
	}

简单方法实现:

下面这些方法的实现,按照语义容易理解其作用,直接上代码!

// 选手报名
	public void signForCompetition(Skater skater) {
   
	            for (Skater competitor : competitors) {
   
	                // 重视重复问题!如果滑手已存在即已报过名,不进行增加
	                if (skater.getName().equals(competitor.getName())) {
   
	                    System.out.println("This skater has signed for the competition");
	                    return;
	                }
	            }
	        competitors.add(skater);
	    }
	// 举办比赛,将赛事信息传入
	public void holdCompetition(Competition competition) {
   
	    this.competition = competition;
	}
	// 得到选手名单
	public List<Skater> getCompetitors () {
   
	    return competitors;
	}
重点来了!!
postCompetition方法实现

在此方法中,我们需要公示本次比赛的相关信息:赛事本身信息以及选手基本信息。当然,公示内容只要包括这些就够了,形式可以自由发挥。所以这里的主要操作就是取得我们所需的信息,并进行字符串的拼接,从而得到我们想要的格式,打印即可。

这里我选择直接公示比赛基本信息和滑手基本信息的方式,进行打印:

    public void postCompetitionInfo() {
   
		// 获得所有选手姓名名单
        List<String> names = new ArrayList<>();
        for (Skater skater : competitors) {
   
            names.add(skater.getName());
        }
        // 赛事信息公示
        String competitionPost = "本次滑板大赛——" +competition.getName()+"将在"+competition.getPlace()+"于"+competition.getTime()+"举办!";
        // 滑手姓名紧接上面的字符串
        String namePost ="";
        for (int i=0; i< names.size(); i++) {
   
            namePost += names.get(i)+" ";
        }
        String wholePost = competitionPost+"参赛滑手有:" + namePost + ",望选手准时参赛,祝比赛开展顺利!";
        System.out.println(wholePost);
        // 列表格式公示选手基本信息,包括姓名、性别、年龄和国籍
        System.out.println("选手信息如下:");
        for (Skater skater : competitors) {
   
            System.out.println(skater.getName()+" "+skater.getSex()+" "+skater.getAge()+"岁 "+skater.getCountry());
        }
    }

打印结果如下(这是Test类中初始化滑手数据后才得到的):

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值