轨道
/
C#
C#
/
练习
/
足球比赛报告
足球比赛报告

足球比赛报告

学习练习

简介

switch 语句

维基百科把 switch 语句描述为“一种选择控制机制,用来让变量或表达式的值改变程序的执行流程”。

这套机制涉及以下几个关键字:switch、case、break 和 default。

最简单的情况下,它们会对基元表达式或字符串表达式进行判断,并根据其值做出决定。例如:

string direction = GetDirection();
switch (direction)
{
    case "left":
        GoLeft();
        break;
    case "right":
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

最复杂的情况下,它们会引入向下转型 case <Type> <variable>: 和守卫(when)。

Animal animal = GetAnimal();

switch (animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}

说明

你正在开发一个系统,帮助一家足球俱乐部网站的工作人员报道比赛。 这个系统能够分析比赛的方方面面,无论场上还是场下,并把它们转换成事件流。

1. 根据球衣号码输出球员描述

这支球队一直只踢 4-3-3 阵型,从来不认同 1965 年允许换人的规则修改,更别提扩大阵容了。

球员描述如下:

1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"

实现静态方法 PlayAnalyzer.AnalyzeOnField(),根据球员的球衣号码输出球员描述。

PlayAnalyzer.AnalyzeOnField(10);
// => "striker"

2. 处理未知的球衣号码

修改 PlayAnalyzer.AnalyzeOnField() 方法,当处理 1-11 范围之外的球衣号码时报告 UNKNOWN。

3. 把场下活动也纳入覆盖范围

实现 PlayAnalyzer.AnalyzeOffField() 方法,输出球场周围的活动和人物的描述。 这个方法会接收不同类型的数据,你需要分析这些数据,并把它们转换成合适的文字,帮助记者们。

首先,我们会处理球场相关的数据:

  • 球场当前的观众人数(任意int)
  • 通过球场广播系统播报的通知(任意string)

未知类型的数据不应被处理,因此如果方法接收到其他类型的数据,应返回空字符串。

PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."

PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"

PlayAnalyzer.AnalyzeOffField(0.5);
// => ""

4. 报道比赛中的事件

修改 PlayAnalyzer.AnalyzeOffField() 方法,输出比赛中发生的事件的描述。

事件可以是 Incident 类型的任意子类,其中会包含对该事件的描述。 受伤是一种特殊的事件,因为它会导致比赛暂停,所以要区别对待。

PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."

PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."

5. 报道俱乐部的主教练

修改 PlayAnalyzer.AnalyzeOffField() 方法,提到比赛期间在场的俱乐部主教练。

主教练是 Manager 类型的实例,带有自己的名字以及所执教俱乐部的名称。 主教练的俱乐部可能是未知的,这种情况下它会被设为 null。 如果主教练的俱乐部未知,它就不应出现在描述中。

PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"

PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 足球比赛报告 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。