練習 - 完成挑戰活動,以區分 do-while 反覆運算陳述式
程式碼挑戰將強化您所學到的內容,並協助您在繼續進行前先獲得一些信心。
檢查 do-while 陳述式反覆運算之間的差異
如我們所見,C# 支援四種類型的反覆運算陳述式: for、foreach、do-while 和 while。 Microsoft 的語言參考文件描述這些陳述式,如下所示:
-
for陳述式: 當指定的布林運算式 (「條件」) 評估為 true 時,執行其主體。 -
foreach陳述式:列舉集合元素,並針對集合的每個元素執行其主體。 -
do-while陳述式:有條件地執行其主體一或多次。 -
while陳述式:有條件地執行其主體零或多次。
for 和 foreach 反覆運算似乎彼此清楚區別,並且與 do-while 和 while 反覆運算清楚區別。 不過,do-while 和 while 陳述式的定義似乎相當類似。 知道何時在 do-while 與 while 之間選擇似乎更反覆無常,甚至可能會有點混淆。 某些挑戰專案可能有助於釐清差異。
在此挑戰中,您會看到三個不同編碼專案的條件。 每個專案都需要您使用 do-while 或 while 陳述式來實作反覆運算程式碼區塊。 您必須評估指定的條件,才能在 do-while 與 while 陳述式之間進行選擇。 如果您的第一個選擇並不如您所期望的一樣,您可以在開始之後進行切換。
注意
撰寫程式碼專案的條件可用來協助您在 do-while 與 while 陳述式之間進行選取。 關於將進行評估的布林運算式,您所知或不知的資訊有時可協助您在 do-while 和 while 陳述式之間進行選取。 在本挑戰練習中,專案條件包含將用來建構布林運算式的資訊。
在此挑戰期間管理使用者輸入
使用 Console.ReadLine() 陳述式來取得使用者輸入時,通常會針對輸入變數使用可為 Null 的類型字串 (指定 string?),然後評估使用者所輸入的值。 下列程式碼範例會使用可為 Null 的型別字串以擷取使用者輸入。 當使用者提供的值為 Null 時,反覆運算會繼續:
string? readResult;
Console.WriteLine("Enter a string:");
do
{
readResult = Console.ReadLine();
} while (readResult == null);
while 陳述式所評估的布林運算式可用來確保使用者輸入符合指定的需求。 例如,如果提示要求使用者輸入至少包含三個字元的字串,則可以使用下列程式碼:
string? readResult;
bool validEntry = false;
Console.WriteLine("Enter a string containing at least three characters:");
do
{
readResult = Console.ReadLine();
if (readResult != null)
{
if (readResult.Length >= 3)
{
validEntry = true;
}
else
{
Console.WriteLine("Your input is invalid, please try again.");
}
}
} while (validEntry == false);
如果您想要使用 Console.ReadLine() 輸入做為數值,則需要將字串值轉換成數值類型。
您可以使用 int.TryParse() 方法將字串值轉換成整數。 方法會使用兩個參數,一個將進行評估的字串,以及將指派值的整數變數名稱。 方法會傳回布林值。 下列程式碼範例將示範如何使用 int.TryParse() 方法:
// capture user input in a string variable named readResult
int numericValue = 0;
bool validNumber = false;
validNumber = int.TryParse(readResult, out numericValue);
如果指派給 readResult 的字串值代表有效的整數,則會將值指派給名為 numericValue 的整數變數,並將 true 指派給名為 validNumber 的布林變數。 如果指派給 readResult 的值不代表有效的整數,則會指派值 validNumber 給 false。 例如,如果 readResult 等於「7」,則會將值 7 指派給 numericValue。
程式碼專案 1 - 撰寫可驗證整數輸入的程式碼
以下是您第一個撰寫程式碼專案必須實作的條件:
您的解決方案必須包含
do-while或while反覆運算。反覆運算區塊之前:您的解決方案必須使用
Console.WriteLine()陳述式來提示使用者輸入介於 5 到 10 之間的整數值。在反覆運算區塊內:
- 您的解決方案必須使用
Console.ReadLine()陳述式向使用者取得輸入。 - 您的解決方案必須確定輸入是整數的有效標記法。
- 如果整數值並非介於 5 到 10 之間,則您的程式碼必須使用
Console.WriteLine()陳述式,以提示使用者輸入介於 5 到 10 之間的整數值。 - 您的解決方案必須確定整數值介於 5 到 10 之間,才能結束反覆運算。
- 您的解決方案必須使用
在反覆運算程式碼區塊之下 (之後):您的解決方案必須使用
Console.WriteLine()陳述式,以通知使用者已接受其輸入值。
請確定您已在 Visual Studio Code 中開啟空的 Program.cs 檔案。
如有必要,請開啟 Visual Studio Code,然後完成下列步驟,以在編輯器中備妥 Program.cs 檔案:
在 [檔案] 功能表上,選取 [開啟資料夾]。
使用 [開啟資料夾] 對話框瀏覽至 CsharpProjects 資料夾,然後開啟。
在 Visual Studio Code 的 [總管] 窗格中,選取 [Program.cs]。
在 Visual Studio Code [選取項目] 功能表上,選取 [全部選取],然後按 [刪除] 鍵。
為程式碼專案 1 撰寫實作每個條件的程式碼。
執行您的應用程式,並確認您的程式碼會根據指定的需求來驗證使用者輸入。
例如,當您執行應用程式時,其應該拒絕輸入值,例如「two」和「2」,但應該接受「7」的輸入值。
上述範例中,主控台輸出看起來應該類似下列內容:
Enter an integer value between 5 and 10 two Sorry, you entered an invalid number, please try again 2 You entered 2. Please enter a number between 5 and 10. 7 Your input value (7) has been accepted.
程式碼專案 2 - 撰寫可驗證字串輸入的程式碼
以下是您第二個撰寫程式碼專案必須實作的條件:
您的解決方案必須包含
do-while或while反覆運算。在反覆運算區塊之前:您的解決方案必須使用
Console.WriteLine()陳述式來提示使用者輸入三個角色名稱之一:Administrator、Manager 或 User。在反覆運算區塊內:
- 您的解決方案必須使用
Console.ReadLine()陳述式向使用者取得輸入。 - 您的解決方案必須確定輸入的值符合三個角色選項之一。
- 您的解決方案應該使用輸入值上的
Trim()方法,來忽略前置和後置空白字元。 - 您的解決方案應該使用輸入值上的
ToLower()方法來忽略大小寫。 - 如果其中一個角色選項的輸入值不符合,您的程式碼必須使用
Console.WriteLine()陳述式來提示使用者有效的輸入。
- 您的解決方案必須使用
在反覆運算程式碼區塊之下 (之後):您的解決方案必須使用
Console.WriteLine()陳述式,以通知使用者已接受其輸入值。
註解 Visual Studio Code 編輯器面板中的所有程式碼
- 選取程式碼編輯器中的所有程式碼
- 在 [編輯] 功能表上,選取 [切換封鎖註解]。
為程式碼專案 2 撰寫實作每個條件的程式碼。
執行您的應用程式,並確認您的程式碼會根據指定的需求來驗證使用者輸入。
例如,當您執行應用程式時,其應該拒絕輸入值,例如「Admin」,但應該接受「administrator」的輸入值。
此範例的主控台輸出應該看起來如下:
Enter your role name (Administrator, Manager, or User) Admin The role name that you entered, "Admin" is not valid. Enter your role name (Administrator, Manager, or User) Administrator Your input value (Administrator) has been accepted.
程式碼專案 3 - 撰寫處理字串陣列內容的程式碼
以下是您第三個撰寫程式碼專案必須實作的條件:
您的解決方案必須使用下列字串陣列,以表示撰寫程式碼邏輯的輸入:
string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };您的解決方案必須宣告名為
periodLocation的整數變數,以用來保存字串內句號字元的位置。您的解決方案必須包含外部
foreach或for迴圈,這些迴圈可用來處理陣列中每個字串元素。 您將在迴圈內所將處理的字串變數應該命名為myString。在外部迴圈中,您的解決方案必須使用
IndexOf()類別的String方法,以取得myString變數中第一個句號字元的位置。 方法呼叫應該類似:myString.IndexOf(".")。 如果字串中沒有句號字元,則會傳回 -1 的值。您的解決方案必須包含內部
do-while或while迴圈,這些迴圈可用來處理myString變數。在內部迴圈中,您的解決方案必須擷取並顯示 (寫入主控台) 每個已處理字串中所包含的每個句子。
在內部迴圈中,您的解決方案不得顯示句號字元。
在內部迴圈中,您的解決方案必須使用
Remove()、Substring()和TrimStart()方法來處理字串資訊。
註解 Visual Studio Code 編輯器面板中的所有程式碼
- 選取程式碼編輯器中的所有程式碼
- 在 [編輯] 功能表上,選取 [切換封鎖註解]。
為程式碼專案 3 撰寫實作每個條件的程式碼。
執行您的應用程式,並確認您的輸出符合需求。
如果您的程式碼邏輯正確運作,則您的輸出應該看起來如下:
I like pizza I like roast chicken I like salad I like all three of the menu choices
無論是遇到困難必須查看解決方案,或已成功完成,都請繼續檢視此挑戰的解決方案專案。