Ćwiczenie — tworzenie i testowanie pętli na potrzeby wprowadzania nowych danych zwierząt domowych
W tym ćwiczeniu utworzysz kod, który kontroluje dane wejściowe nowych ourAnimals danych tablicy. Obliczasz początkowe wartości zmiennych sterujących pętli i konstruujesz pętlę, która zbiera dane określone przez użytkownika dla zwierząt. Szczegółowe zadania wykonywane w tym ćwiczeniu to:
- Oblicz petCount: napisz kod, który zlicza liczbę zwierząt domowych w
ourAnimalstablicy, która ma przypisane dane. - Komunikaty warunkowe: napisz kod, aby wyświetlić dane wyjściowe komunikatu, gdy
petCountwartość jest mniejsza niżmaxPets. - Pętla zewnętrzna: utwórz strukturę pętli, która będzie używana do wprowadzania nowych
ourAnimalsdanych tablicy. - Kryteria zakończenia: napisz kod, który ocenia warunek zakończenia dla pętli "wprowadź nowe dane tablicy ourAnimals".
- Test weryfikacyjny: wykonaj testy weryfikacyjne dla kodu opracowywany w tym ćwiczeniu.
Ważne
Przed rozpoczęciem tego ćwiczenia należy wykonać poprzednie ćwiczenie w tym module.
Zlicz liczbę zwierząt domowych w tablicy ourAnimals
W tym zadaniu ustanowisz kryteria wyjścia dla pętli wprowadzania danych i utworzysz pętlę for , która może służyć do zliczenia liczby zwierząt domowych w ourAnimals przypisanych danych.
Upewnij się, że program Visual Studio Code jest otwarty i że plik Program.cs jest widoczny w edytorze.
Znajdź instrukcję
switch(menuSelection), a następnie znajdźcase "2":wiersz kodu.Znajdź instrukcję
Console.WriteLine()wyświetlającą komunikat "najbliższy wkrótce", a następnie zastąp go pustym wierszem kodu.W pustym wierszu kodu, który został utworzony, aby zadeklarować
anotherPetzmienne ipetCount, wprowadź następujący kod:string anotherPet = "y"; int petCount = 0;Te dwie zmienne kontrolują iterację pętli używanej
whiledo wprowadzania nowych danych zwierząt domowych. Zainicjuj obie zmienne w ramach deklaracji.anotherPetjest inicjowany z wartościąyprzed rozpoczęciemwhilepętli. Otrzyma ona przypisaną przez użytkownika wartość lubynwewnątrzwhilepętli.petCountreprezentuje liczbę zwierząt z przypisanymi cechami zwierząt domowych. Zostanie przypisana wartość obliczeniowa pozawhilepętlą i będzie zwiększana przez1wewnątrzwhilepętli za każdym razem, gdy nowe zwierzę zostanie dodane do tablicyourAnimals.
Ważne
Zakres zmiennych powinien być zawsze tak wąski, jak to możliwe. W aplikacji Contoso Pets można ograniczyć zakres
petCountna poziomie aplikacji zamiast określaniacase "2":zakresu do bloku kodu. Większy zakres umożliwia dostęppetCountz dowolnego miejsca w aplikacji. JeślipetCountzakres został objęty zakresem na poziomie aplikacji, można przypisać jej wartość podczas tworzenia przykładowych danych i programowo zarządzać jej wartością w pozostałej części aplikacji. Na przykład, gdy znajdziesz dom dla zwierzaka i usuniesz zwierzę zourAnimalstablicy, możesz zmniejszyć opetCount1wartość . Pytanie brzmi: na jakim poziomie należy określić zakres zmiennej, gdy nie masz pewności, czy będzie ona używana w innych częściach aplikacji? W takim przypadku warto ograniczyć zakrespetCountna poziomie aplikacji, mimo że nie używasz go nigdzie indziej. W końcu określenie zakresupetCountna poziomie aplikacji gwarantuje, że jest ona dostępna, jeśli zdecydujesz się na jej użycie w innym miejscu. Być może możesz również ograniczyć zakres innych zmiennych na poziomie aplikacji. Dzięki temu zmienne są zawsze w zakresie i są dostępne. Dlaczego więc nie określać zakresu zmiennych na poziomie aplikacji, jeśli sądzisz, że mogą one być używane później w aplikacji? Określanie zakresu zmiennych na wyższym poziomie niż jest to konieczne może prowadzić do problemów. Podwyższony zakres zwiększa wymagania dotyczące zasobów aplikacji i może uwidaczniać aplikację niepotrzebnym zagrożeniom bezpieczeństwa. W miarę zwiększania się coraz większych i bardziej złożonych aplikacji wymagają większej ilości zasobów. Telefony i komputery przydzielają pamięć dla tych zasobów, gdy są w zakresie. Gdy twoje aplikacje stają się bardziej "rzeczywiste", stają się bardziej dostępne. Aplikacje są często dostępne z chmury lub innych aplikacji. W związku z tymi problemami aplikacje są często uruchamiane, gdy nie są używane. Ważne jest, aby wymagania dotyczące zasobów aplikacji były pod kontrolą i możliwie najmniejszym zużyciem zabezpieczeń. Mimo że dzisiejsze systemy operacyjne wykonują świetną robotę w zakresie zarządzania zasobami i zabezpieczania aplikacji, nadal najlepszym rozwiązaniem jest zachowanie zakresu zmiennych do poziomu, w którym są one rzeczywiście potrzebne. Jeśli zdecydujesz się używaćpetCountbardziej szeroko w aplikacji, możesz zaktualizować kod w celu określenia zakresupetCountna wyższym poziomie w aplikacji. Pamiętaj, aby zachować zakres zmiennych tak wąsko, jak to możliwe, i zwiększyć ich zakres tylko wtedy, gdy stanie się to konieczne.W wierszu kodu poniżej deklaracji zmiennych, aby utworzyć pętlę, która iteruje przez zwierzęta w
ourAnimalstablicy, wprowadź następujący kod:for (int i = 0; i < maxPets; i++) { }Ten kod powinien wyglądać znajomo. Użyjesz tej
forpętli za każdym razem, gdy iterujesz przez tablicęourAnimals.W bloku
forkodu pętli, aby sprawdzić, czy dane cech zwierząt domowych zostały przypisane do zwierzęcia, wprowadź następujący kod:if (ourAnimals[i, 0] != "ID #: ") { }Ponownie ten kod powinien wyglądać znajomo. Użyjesz tej
ifinstrukcji za każdym razem, gdy sprawdzisz, czy przypisano cechy zwierząt domowych.W bloku
ifkodu, który został utworzony, aby zwiększać opetCount1, wprowadź następujący kod:petCount += 1;Pośmiń minutę, aby zbadać ukończoną
forpętlę.Ukończona
forpętla powinna wyglądać podobnie do następującego kodu:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Ten kod przeprowadzi pętlę przez sprawdzanie tablicy dla przypisanych
ourAnimalsdanych. Gdy znajdzie zwierzę z przypisanymi danymi, zwiększapetCounterwartość .W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Otwórz panel Zintegrowany terminal w programie Visual Studio Code i wprowadź polecenie w celu skompilowania programu.
Aby otworzyć terminal integrowania z widoku EKSPLORATOR, kliknij prawym przyciskiem myszy pozycję Starter, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu. Możesz również użyć menu Widok lub Terminal , aby otworzyć panel Zintegrowany terminal.
Aby skompilować
dotnet buildprogram, wprowadź polecenie w wierszu polecenia terminalu.Napraw wszelkie zgłoszone błędy kompilacji przed kontynuowaniem.
Uwaga / Notatka
Na razie możesz zignorować komunikat Ostrzeżenie o
anotherPetprzypisaniu, ale nigdy nie był używany. Dodasz kod, który będzie używanyanotherPetw dalszej części tego ćwiczenia.Jeśli występują błędy kompilacji, pamiętaj, że komunikaty o błędach kompilacji i ostrzeżeniach informują o tym, czym jest problem i gdzie można go znaleźć. Jeśli zaktualizujesz kod, pamiętaj, aby zapisać zmiany przed ponowną kompilacją.
Zamknij panel Terminal.
Wyświetlanie danych wyjściowych komunikatów, gdy parametr petCount jest mniejszy niż maxPets
W tym zadaniu sprawdzasz, czy petCount wartość jest mniejsza niż maxPets i czy jest, zostanie wyświetlony komunikat dla użytkownika.
W pustym wierszu kodu poniżej utworzonej
forpętli, aby sprawdzić, czypetCountwartość jest mniejsza niżmaxPets, wprowadź następujący kod:if (petCount < maxPets) { }W bloku kodu instrukcji
if, aby wyświetlić komunikat dla użytkownika, wprowadź następujący kod:Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Użytkownicy aplikacji mają wprowadzać cechy zwierząt domowych. Ten komunikat zawiera ważny kontekst.
Pośmiń minutę, aby przejrzeć
case "2":gałąź kodu instrukcjiswitch.Na tym etapie
case "2":gałąź kodu powinna wyglądać podobnie do następującego kodu:case "2": // Add a new animal friend to the ourAnimals array string anotherPet = "y"; int petCount = 0; for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } } if (petCount < maxPets) { Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more."); } Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Otwórz panel Zintegrowany terminal w programie Visual Studio Code i wprowadź polecenie w celu skompilowania programu.
Napraw wszelkie zgłoszone błędy kompilacji przed kontynuowaniem.
Ponownie możesz zignorować komunikat Ostrzeżenie o
anotherPetprzypisaniu, ale nigdy nie był używany. W następnym zadaniu rozpoczniesz tworzenie pętli używanejwhiledo wprowadzania danych dla co najmniej jednego zwierzaka. Wyrażenie utworzone dlawhilepętli będzie używaneanotherPet, a ten komunikat ostrzegawczy zniknie.Pamiętaj, że komunikaty ostrzegawcze to rzeczy, o które należy się martwić, ale nie uniemożliwią ci uruchamiania programu.
W wierszu polecenia terminalu wprowadź polecenie, aby uruchomić program.
dotnet runWprowadź polecenie w wierszu polecenia terminalu, aby uruchomić kod programu.Jeśli kod nie generuje błędu środowiska uruchomieniowego, główne menu aplikacji powinno być teraz wyświetlane na panelu terminalu.
W wierszu polecenia terminalu wprowadź wartość 2
Ta wartość odpowiada
case "2":gałęzi kodu.Sprawdź, czy w terminalu jest wyświetlany następujący komunikat.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Jeśli nie widzisz oczekiwanego komunikatu, przejrzyj kod, aby zidentyfikować i rozwiązać problem. Zapisz zmiany, ponownie skompiluj i ponownie uruchom aplikację. Przed kontynuowaniem upewnij się, że kod działa zgodnie z oczekiwaniami.
W wierszu polecenia terminalu naciśnij Enter, aby kontynuować uruchamianie aplikacji.
Zamknij aplikację, a następnie zamknij panel Terminal.
Tworzenie struktury pętli, która będzie używana do wprowadzania nowych danych tablicy ourAnimals
W tym zadaniu utworzysz pętlę while , która będzie nadal iterować tak długo, jak anotherPet jest równa y i petCount jest mniejsza niż maxPets.
W edytorze kodu utwórz pusty wiersz kodu poniżej
if (petCount < maxPets)bloku kodu.Aby rozpocząć proces tworzenia nowej
whilepętli, wprowadź następujący kod:while (anotherPet == "y" && petCount < maxPets) { }W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Otwórz panel Zintegrowany terminal w programie Visual Studio Code i wprowadź polecenie w celu skompilowania programu.
Zwróć uwagę, że komunikat Ostrzeżenie
anotherPetnie jest już używany.Jeśli zgłoszono jakiekolwiek błędy kompilacji lub ostrzeżenia, rozwiąż problemy przed kontynuowaniem.
Sprawdzanie warunku wyjścia dla nowej pętli zwierząt domowych
W tym zadaniu zaktualizujesz while (anotherPet == "y" && petCount < maxPets) blok kodu. Nowy kod zwiększa petCount się, a następnie sprawdza, czy petCount wartość jest mniejsza niż maxPets. Jeśli petCount wartość jest mniejsza niż maxPets, pytasz użytkownika, czy chce wprowadzić informacje dla innego zwierzaka, i upewnij się, że odpowiedź to y lub n.
while (anotherPet == "y" && petCount < maxPets) Po bloku kodu sprawdzasz wartość petCount. Jeśli petCount wartość jest równa maxPets, informujesz użytkownika, że nie można dodać więcej zwierząt domowych.
Uwaga / Notatka
Kod używany do wprowadzania danych zwierząt domowych jest opracowywany w następnym ćwiczeniu. Na razie zwiększa się tak, petCount jakby dane były wprowadzane i zapisywane w tablicy ourAnimals . Dzięki temu można zakończyć tworzenie logiki kodu skojarzonej z pętlą while .
Utwórz pusty wiersz kodu wewnątrz bloku
while (anotherPet == "y" && petCount < maxPets)kodu pętli utworzonej w poprzednim zadaniu.Aby zwiększać
petCountwartość , wprowadź następujący kod:// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Aby sprawdzić, czy
petCountwartość jest mniejsza niżmaxPets, wprowadź następujący kod:// check maxPet limit if (petCount < maxPets) { }W bloku kodu utworzonej
ifinstrukcji, aby zapytać użytkownika, czy chcesz dodać innego zwierzaka, wprowadź następujący kod:// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");Poniżej wprowadzonego komunikatu
WriteLine(), aby odczytać odpowiedź użytkownika i upewnić się, że użytkownik wprowadził ciąg "y" lub "n", wprowadź następujący kod:do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Znajdź instrukcję
breakoddzielającącase "2";się odcase "3";instrukcji w instrukcjiswitch.Zwróć uwagę na instrukcje
Console.WriteLine()iConsole.ReadLine()na końcu koducase "2";.Ten kod wyświetla użytkownikowi komunikat, a następnie wstrzymuje aplikację.
Aby ująć instrukcje
Console.WriteLine()iConsole.ReadLine()wewnątrzifinstrukcji , zaktualizuj kod w następujący sposób:if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Wartość
petCountelementu jest zwiększana wewnątrzwhilepętli. JeślipetCountwartość jest równamaxPets, do tablicyourAnimalsnie można dodać więcej zwierząt domowych. Jeśli tak się dzieje, należy poinformować użytkownika.Aby poinformować użytkownika, że użytkownik Contoso Pets osiągnął swoją pojemność, zaktualizuj kod w następujący sposób:
if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Pośmiń chwilę, aby przejrzeć kod w
whilepętli i komunikat użytkownika, który został utworzony.Pętla
while (anotherPet == "y" && petCount < maxPets)i kod, który wyświetla komunikat użytkownika, powinien wyglądać podobnie do następującego kodu:while (anotherPet == "y" && petCount < maxPets) { // increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1; // check maxPet limit if (petCount < maxPets) { // another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)"); do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n"); } } if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); }W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Otwórz panel Zintegrowany terminal w programie Visual Studio Code i wprowadź polecenie w celu skompilowania programu.
Napraw wszelkie zgłoszone błędy kompilacji lub ostrzeżenia przed kontynuowaniem.
Sprawdź swoją pracę
W tym zadaniu uruchomisz aplikację ze zintegrowanego terminalu i sprawdzisz, czy utworzona logika pętli i rozgałęziania działa zgodnie z oczekiwaniami.
W razie potrzeby otwórz panel zintegrowany terminal programu Visual Studio Code.
W wierszu polecenia terminalu wprowadź polecenie dotnet run
W wierszu polecenia terminalu wprowadź wartość 2
Sprawdź, czy są wyświetlane następujące komunikaty:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)W wierszu polecenia terminalu wprowadź n
Sprawdź, czy kod kończy pętlę wprowadzania nowych zwierząt domowych po wprowadzeniu ciągu "n".
Jeśli logika kodu działa zgodnie z oczekiwaniami, powinno zostać wyświetlone menu główne w terminalu.
Jeśli kod nie zamyka pętli w oczekiwany sposób, naciśnij Ctrl + C w terminalu, aby wymusić zatrzymanie wykonywania. Należy ręcznie przejść przez kod i śledzić wartości zmiennych kryteriów zakończenia. Zaktualizuj kod, jeśli to konieczne, aby upewnić się, że wyjdą
whilez pętli po wprowadzeniu ciągu "n". Zapisz zmiany, skompiluj program i uruchom test weryfikacyjny, aby wrócić do tego momentu.W wierszu polecenia terminalu wprowadź wartość 2
Po raz kolejny zobaczysz następujące komunikaty:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)W wierszu polecenia terminalu wprowadź y
Pośmiń chwilę, aby zastanowić się, jak
petCountjest używany w kodzie.Zanim będzie można zweryfikować kod, musisz zrozumieć logikę kodu.
W takim przypadku logika kodu opiera się na relacji między
petCountimaxPets. Wiesz, żemaxPetsprzypisano wartość8, ale co zpetCount? Następujące elementy pomagają ocenić zaimplementowaną logikę:Wiesz, że
petCountpo4wprowadzeniu pierwszej iteracjiwhilepętli.Wiesz, że
petCountjest zwiększany za każdym razem, gdy pętlawhileiteruje.Wiesz, że przypisana
petCountwartość i sposób, w jaki zwiększa się, wpływają na sposóbpetCountprzechowywania danych w tablicyourAnimals. Poniższe elementy wyjaśniają relację między danymi przechowywanymipetCountw programieourAnimals:- Aplikacja dodaje cztery zwierzęta do tablicy
ourAnimalspodczas tworzenia przykładowych danych. - Aplikacja przechowuje nowe dane w tablicy
ourAnimals, gdy wartośćpetCountto4. To nie jest usterka. Kod ma sens, gdy pamiętasz, że elementy tablicy są oparte na zera. Na przykładourAnimals[0,0]zawiera identyfikator zwierzęcia dla zwierząt1iourAnimals[3,0]zawiera identyfikator zwierzęcia dla zwierząt4. W związku z tym, kiedypetCount4przechowujesz dane dla piątego zwierzaka. - Aplikacja będzie przechowywać dane zwierząt domowych w tablicy, zanim zwiększy
petCountwartość . - Aplikacja zwiększa
petCountsię przed wyświetleniem monitu użytkownika o dodanie innego zwierzaka. - Gdy aplikacja wyświetla monit Czy chcesz wprowadzić informacje dla innego zwierzaka (y/n) monit po raz pierwszy,
petCountjest już ustawiony na5wartość .
- Aplikacja dodaje cztery zwierzęta do tablicy
Jeśli użytkownik wprowadzi wartość y w pierwszym wierszu Czy chcesz wprowadzić informacje dla innego zwierzaka (y/n), wiesz, że:
- Pętla
while (anotherPet == "y" && petCount < maxPets)będzie iterować. Wiesz, że pętla będzie iterować, ponieważanotherPet == "y"ipetCount < maxPets. - Wartość przypisana do
petCountelementu zostanie zwiększana (gdy pętlawhileiteruje). - Wartość przypisana do
petCountbędzie (6po pierwszym wprowadzeniu przez użytkownika).
- Pętla
Pamiętaj o tej analizie logiki kodu podczas kontynuowania testowania aplikacji.
Zwróć uwagę, że panel terminalu aktualizuje ten sam komunikat "inny zwierzę?", ale kod nie wyświetla zaktualizowanego
petCountelementu .Panel Terminal powinien teraz wyświetlić następujące dane wyjściowe:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n)W wierszu polecenia terminalu wprowadź y
Po drugim wprowadzeniu
ypetCountparametr jest zwiększany do7wartości . Tak więcpetCountjest nadal mniej niżmaxPetsW wierszu polecenia terminalu wprowadź y
Po wprowadzeniu
ypo razpetCounttrzeci wartość jest zwiększana do8wartości . WięcpetCountjest teraz równemaxPetsSprawdź, czy kod kończy pętlę
whilepo raz trzeci.Panel Terminal powinien teraz wyświetlić następujące dane wyjściowe:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y We have reached our limit on the number of pets that we can manage. Press the Enter key to continue.Jeśli kod nie zamyka pętli w oczekiwany sposób, wykonaj kroki przez kod ręcznie i prześledź wartości zmiennych kryteriów zakończenia. Zaktualizuj kod, aby upewnić się, że zamykasz pętlę, gdy
petCountosiągnie wartość równąmaxPetswartości . Zachowaj odpowiedź na "y", dopóki nie wiesz, żepetCountjest równamaxPetswartości , która ma wartość8domyślną .W wierszu polecenia terminalu naciśnij Enter, aby kontynuować uruchamianie aplikacji.
Zamknij aplikację, a następnie zamknij panel Terminal.