學習軌道
/
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#,全部免費。