Two Fer

Two Fer

簡單

簡介

在某些英語口音中,當你快速說出「two for」時,聽起來就像「two fer」。 「Two-for-one」的意思是,如果你買一個,就可以免費得到一個。 所以「two-fer」這個詞通常暗示著買一送一的優惠。

想像一家麵包店有個節日優惠,你可以用一塊餅乾的價格買到兩塊餅乾(「two-fer one!」)。 你接受了這個優惠,並且(非常慷慨地)決定把多出來的那塊餅乾給隊伍中的另一個人喔。

說明

你的任務是決定當你分送多出來的那塊餅乾時,要說什麼。

如果你知道對方的名字(例如對方叫 Do-yun),你會說:

One for Do-yun, one for me.

如果你不知道對方的名字,就改說 you。

One for you, one for me.

以下是一些例子:

名字 對話
Alice One for Alice, one for me.
Bohdan One for Bohdan, one for me.
One for you, one for me.
Zaphod One for Zaphod, one for me.

實作

開始之前,請先確認你了解如何撰寫能通過測試案例的程式碼。如果想了解更多背景資訊,可以參考這篇教學。

大多數 Java 練習都包含多個測試案例。 這些案例的結構,是為了支援一套實用的流程,也就是測試驅動開發(TDD)。 TDD 會重複一個有結構的循環,幫助程式設計師逐步打造複雜的功能,而不是一次全部寫完。 這個循環可以描述如下:

  1. 新增一個測試,描述你的程式碼目前還缺少的某一項功能。
  2. 執行測試,確認這個剛新增的測試會失敗。
  3. 更新現有的程式碼,直到:
    • 所有舊的測試仍然通過;
    • 新的測試也能通過。
  4. 清理你的程式碼,確保所有測試仍然通過。 這通常包括重新命名變數、移除重複的邏輯片段、移除殘留的日誌輸出等。
  5. 回到步驟 1,直到所有想要的功能都完成為止!

這個 track 的測試檔案包含_所有_你的解法必須通過才算有效的測試。 這乍看之下似乎與上述的循環並不相容,因為那個循環是一次寫一個測試。 不過,我們用來撰寫測試的工具 JUnit,提供了一個 @Disabled 註解,可以用來暫時略過已經寫好的測試。 使用這個註解,我們就能確保交付給你的測試檔案符合以下規則:

  • 任何測試檔案中的第一個測試,預設_不會_被略過。
  • 任何測試檔案中,除了第一個以外的所有測試,預設_都會_被略過。

這讓你可以依照以下稍微調整過的步驟,模擬 TDD 循環:

  1. 執行測試,確認目前_最多只有一個_測試失敗。
  2. 更新現有的程式碼,直到所有未被略過的測試都通過。
  3. 清理你的程式碼,確保所有未被略過的測試仍然通過。
  4. 移除測試檔案中最上方的 @Disabled註解。
  5. 回到步驟 1,直到沒有任何測試被略過,所有測試都通過!

出處

探索這道練習的來源。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Java Exercism

準備好開始 Two Fer 了嗎?

註冊 Exercism,透過 26 個概念158 個練習 和真人引導來學習並精通 Java,全部免費。