练习 - 添加狗搜索
在本练习中,将功能“显示具有指定特征的所有狗”(菜单项 #2)添加到应用程序。 该练习使用上一练习中添加 suggestedDonation 数据的解决方案项目。
注释
此项目是“最小可行产品”(MVP)功能。 MVP 功能旨在成为功能的基本工作原型,可实现快速轻松地交付。 MVP 通常不是最终产品,其用途是帮助你完成想法、测试并收集进一步的要求。
搜索功能将提示用户输入一个搜索词(或短语),描述希望在待领养宠物中找到的特征。 然后,搜索可领养狗的描述,以寻找与用户输入完全匹配的内容。 有关匹配的狗的信息将输出到控制台。 如果未识别任何匹配项,则会显示一条消息 “我们的狗不是匹配项” ,以及使用的搜索词。
在本练习中完成的任务如下:
- 收集宠物特征搜索词的用户输入
- 循环浏览动物数组并识别“狗”
- 在每只狗的宠物描述中搜索术语匹配
- 显示具有字词匹配内容的狗狗
在 Visual Studio Code 中,打开上一练习中已完成并添加了捐款信息的 Project.cs 文件,以便开始当前任务。
收集用户输入的宠物特征搜索词
查看 Project.cs 代码中注释 #5 之后的菜单切换语句。 你发现显示 “UNDER CONSTRUCTION” 消息的代码。
删除
Console.WriteLine("\nUNDER CONSTRUCTION - please check back next month to see progress.");与case "2":语句之间的代码Console.WriteLine("Press the Enter key to continue.");,以使代码符合以下示例:case "2": // Display all dogs with a specified characteristic Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;添加代码以收集
dogCharacteristic字符串的用户输入。 收集输入需要一个while循环,该循环会继续提示用户,直到他们提交输入。 循环指示用户Enter one desired dog characteristic to search for。 输入空字符串将重复循环。 将以下代码case "2:放在语句前面break;,如下所示:case "2": // Display all dogs with a specified characteristic string dogCharacteristic = ""; while (dogCharacteristic == "") { // have the user enter physical characteristics to search for Console.WriteLine($"\nEnter one desired dog characteristics to search for"); readResult = Console.ReadLine(); if (readResult != null) { dogCharacteristic = readResult.ToLower().Trim(); } } Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;查看添加的代码。
case "2":代码的主要功能包括:- 代码以字符串声明
string dogCharacteristic = "";开头,该字符串的范围限制为case "2":。 不能在 case 语句代码之外的任何位置使用dogCharacteristic。 - 在
Console.ReadLine()将用户输入收集为dogCharacteristic后,它会确保值不为 null,且将字符串设置为小写并剪裁周围的空格。 - 如果
dogCharacteristic值为 null,则循环将重复收集输入。
- 代码以字符串声明
保存代码,然后使用终端进行编译
dotnet build(可以参考上一练习中的步骤),并修复任何错误。使用
dotnet run运行代码。若要测试应用的搜索词输入功能,请输入
2,选择“菜单选项2”进行搜索。在“输入所需狗特征搜索”提示处按“Enter”,而不输入数据。 程序应返回到
Enter one desired dog characteristics to search for提示。程序应回到提示界面,直到用户输入字符为止。
在提示符下,使用
golden作为条目来测试搜索词条目。 程序应返回菜单,而不会出错。在菜单中,键入“Exit”退出程序。
确定哪些动物是狗
现在,在 dogCharacteristic 下的上述代码后添加使用狗狗描述内的用户输入 case "2" 来进行搜索的功能。 但首先,你需要识别狗。
在
case "2"代码的末尾,紧靠在代码Console.WriteLine("\n\rPress the Enter key to continue");(位于break;之前)之前添加以下代码:// #6 loop through the ourAnimals array to search for matching animals for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 1].Contains("dog")) { // #7 Search combined descriptions and report results } }花一分钟时间检查添加到代码末尾的
case "2":循环。代码使用
ourAnimals[i,1]对“狗”进行筛选,数据存储在animalSpecies中。 如果animalSpecies存储 “dog” 作为其值,则代码将移动到 if 语句的括号中,其中可以搜索合并的描述。请使用
dotnet build编译代码并修复任何错误。
搜索狗的综合描述信息
之前的代码确保您只搜索狗的相关描述。 现在,你需要搜索狗狗的说明,并输出有关匹配项的信息。
在考虑说明时,你意识到有两个描述:animalPhysicalDescription 和 animalPersonalityDescription;。 团队讨论该功能,并确定组合说明适用于搜索。
注释
一些开发人员将开发过程中需求的增加称为“范围蔓延”。虽然合并描述的工作不多,但它仍然增加了时间和复杂性。 因此,你应该让团队知道添加的要求通常会延迟项目完成。
合并狗的描述,以便更容易搜索
需要声明一个字符串 dogDescription 来保存从 animalPhysicalDescription 和 animalPersonalityDescription; 合并而来的数据。
使用以下代码在注释 #6 之前声明
dogDescription:string dogDescription = "";现在,使用前面声明的
dogDescription字符串,并为每个动物填充物理和个性说明使用
dogDescription和animalPhysicalDescription的值填充animalPersonalityDescription;变量。在注释 #7 后添加以下代码:
dogDescription = ourAnimals[i, 4] + "\n" + ourAnimals[i, 5];
搜索狗狗的组合描述并显示
现在,在合并后的dogCharacteristic数据中添加对dogDescription的搜索。 你需要添加if语句,以确定是否针对每只狗的搜索有匹配项。
使用以下代码更新注释 #7 之后(
dogDescription = ourAnimals[i, 4] + "\n" + ourAnimals[i, 5];后)的代码:if (dogDescription.Contains(dogCharacteristic)) { Console.WriteLine($"\nOur dog {ourAnimals[i, 3]} is a match!"); Console.WriteLine(dogDescription); }检查前面的代码示例,当
if语句在dogCharacteristic中找到dogDescription的匹配项时,系统会将有关狗匹配项和说明的消息输出到控制台。 还需要考虑“未找到匹配项”消息。添加代码
noMatchesDog = true:在注释 #6 之前添加以下代码:
bool noMatchesDog = true;现在,您可以使用此跟踪变量来跟踪未找到匹配项的情况。 当默认值设置为
true时,这意味着“确实没有狗与搜索匹配”。现在,当找到一只狗时,你可以将noMatchesDog从true“翻转”到false。在语句的
if (dogDescription.Contains(dogCharacteristic))括号中,添加以下代码:noMatchesDog = false;查看输入方括号
if (dogDescription.Contains(dogCharacteristic))中的代码是否正确。您应有以下代码:
if (dogDescription.Contains(dogCharacteristic)) { Console.WriteLine($"\nOur dog {ourAnimals[i, 3]} is a match!"); Console.WriteLine(dogDescription); noMatchesDog = false; }最后,需要创建一个代码,该代码决定是否应将“找不到匹配项”消息写入控制台。
在
case "2"代码的末尾,紧靠在代码Console.WriteLine("\n\rPress the Enter key to continue");(位于break;之前)之前添加以下代码:if (noMatchesDog) { Console.WriteLine("None of our dogs are a match found for: " + dogCharacteristic); }此代码示例是本练习的最终代码!
保存更改。
检查你的工作
在 TERMINAL 命令提示符处,若要生成项目代码,请输入以下命令:
dotnet build如果存在错误,则需要阅读错误消息、解决问题并修复或查看“最终”文件夹中的解决方案代码。
使用
dotnet run. 在终端中运行项目代码。
代码运行后,将显示两个菜单项。
在菜单中,输入“
2”并按“Enter”以重复测试狗狗搜索。- Enter nothing as input to test the null entry behavior - Enter "scuba" as input to test the "match not found" - Enter "golden" to get two matches - Enter "medium" to get one match如果这两个步骤都按预期工作,恭喜! 否则的话,请检查练习步骤以查找错误。 请根据需要重新开始或查看“Final”文件夹代码以获取本练习的解决方案代码。
在应用菜单中键入
exit来结束程序,然后关闭终端面板。