练习 - 完成挑战活动以区分 do 和 while 迭代语句
代码挑战将强化所学知识,有助于在继续操作之前增强自信。
查看 do 和 while 语句迭代之间的差异
如前所述,C# 支持四种类型的迭代语句:for
、foreach
、do-while
和 while
。 Microsoft 的语言参考文档介绍了这些语句,如下所示:
-
for
语句:在指定的布尔表达式 ('condition') 计算结果为 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 的“选择”菜单上,选择“全选”,然后按 Delete 键。
编写实现代码项目 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
无论是遇到问题需要查看解决方案,还是成功完成操作,都请继续查看此挑战的解决方案项目。