學習軌道
/
C#
C#
/
練習
/
盧西恩的美味千層麵
盧西恩的美味千層麵

盧西恩的美味千層麵

學習練習

簡介

基礎

C# 是靜態型別的語言,這表示所有東西在編譯時期都有型別。將值指定給一個名稱,就叫做定義變數。定義變數時,可以明確指定它的型別,也可以讓 C# 編譯器根據指定的值推斷它的型別(這叫做_型別推斷_)。因此,下面這兩種變數定義方式是等價的:

int explicitVar = 10; // Explicitly typed
var implicitVar = 10; // Implicitly typed

更新變數的值要透過=運算子。變數一旦定義之後,它的型別就永遠不會改變。

var count = 1; // Assign initial value
count = 2;     // Update to new value

// Compiler error when assigning different type
// count = false;

C# 是物件導向語言,而且所有函式都必須定義在_類別_裡面。定義類別用的是class關鍵字。物件(或_實例_)則是使用new關鍵字建立的。

class Calculator
{
    // ...
}

var calculator = new Calculator();

類別裡的函式就叫做_方法_。每個方法可以有 0 個或多個參數。所有參數都必須明確標註型別,參數沒有型別推斷。同樣地,回傳型別也必須明確寫出來。方法是使用return關鍵字來回傳值。如果要讓其他檔案的程式碼能呼叫某個方法,就必須加上public存取修飾詞。

class Calculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

方法是在實例上使用點(.)語法來呼叫的,要指定呼叫的方法名稱,並為方法的每個參數傳入引數。引數可以選擇性地指定對應的參數名稱。

var calculator = new Calculator();
var sum_v1 = calculator.Add(1, 2);
var sum_v2 = calculator.Add(x: 1, y: 2);

C# 的作用域定義在{和}字元之間。

C# 支援兩種註解。單行註解前面要加//,多行註解則放在/*和*/之間。

說明

Lucian 的女朋友正在回家的路上,而他還沒煮好他們的週年紀念晚餐!

在這個練習中,你將寫一些程式碼,幫 Lucian 依照他最愛的食譜做出一道美味的千層麵。

你有四項任務,全都和烹調千層麵所花費的時間有關。

1. 定義預期的烤箱時間(分鐘)

定義 Lasagna.ExpectedMinutesInOven() 方法,它不接受任何參數,並回傳千層麵應該在烤箱裡待幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:

var lasagna = new Lasagna();
lasagna.ExpectedMinutesInOven();
// => 40

2. 計算剩餘的烤箱時間(分鐘)

定義 Lasagna.RemainingMinutesInOven() 方法,它接受千層麵實際待在烤箱裡的分鐘數作為參數,並根據上一項任務中預期的烤箱時間,回傳千層麵還需要在烤箱裡待幾分鐘。

var lasagna = new Lasagna();
lasagna.RemainingMinutesInOven(30);
// => 10

3. 計算準備時間(分鐘)

定義 Lasagna.PreparationTimeInMinutes() 方法,它接受你加進千層麵的層數作為參數,並回傳你花了幾分鐘準備千層麵,假設每一層要花你 2 分鐘準備。

var lasagna = new Lasagna();
lasagna.PreparationTimeInMinutes(2);
// => 4

4. 計算經過的時間(分鐘)

定義 Lasagna.ElapsedTimeInMinutes() 方法,它接受兩個參數:第一個參數是你加進千層麵的層數,第二個參數是千層麵待在烤箱裡的分鐘數。這個函式應該回傳你花了幾分鐘烹調千層麵,也就是準備時間的分鐘數,加上千層麵當下已經待在烤箱裡的分鐘數。

var lasagna = new Lasagna();
lasagna.ElapsedTimeInMinutes(3, 20);
// => 26
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 盧西恩的美味千層麵 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。