Ćwiczenie — tworzenie pętli do i podczas iteracji
- 10 minut
Pozornie te instrukcje do-while i while są kolejną instrukcją iteracji, która umożliwia iterację przez blok kodu, a tym samym zmianę przepływu wykonywania kodu. Jednak po przeanalizowaniu sposobu działania poszczególnych elementów możemy lepiej zidentyfikować niuanse każdej instrukcji iteracji i kiedy ich używać.
Co to jest instrukcja do-while?
Instrukcja do-while wykonuje instrukcję lub blok instrukcji, podczas gdy określone wyrażenie logiczne ma wartość true. Ponieważ to wyrażenie jest obliczane po każdym wykonaniu pętli, pętla do-while jest wykonywana co najmniej raz.
do
{
// This code executes at least one time
} while (true);
Proces wykonywania rozpoczyna się wewnątrz nawiasu klamrowego. Kod jest wykonywany co najmniej raz, a następnie wyrażenie logiczne obok słowa kluczowego while jest oceniane. Jeśli wyrażenie logiczne zwróci wartość true, blok kodu zostanie wykonany ponownie.
Kodując na sztywno wyrażenie logiczne na true, utworzyliśmy nieskończoną pętlę — pętlę, która nigdy się nie zakończy, przynajmniej tak, jak jest teraz zapisana. Potrzebujemy sposobu, aby wyłamać pętlę wewnątrz bloku kodu. Za chwilę omówimy kryteria wyjścia do-while.
Teraz przygotujemy nasze środowisko kodowania i rozpocznijmy badanie przykładów kodu, które implementują instrukcję do-while .
Przygotowywanie środowiska kodowania
Ten moduł zawiera praktyczne działania, które prowadzą Cię przez proces tworzenia i uruchamiania kodu demonstracyjnego. Zachęcamy do wykonania tych działań przy użyciu programu Visual Studio Code jako środowiska programistycznego. Korzystanie z programu Visual Studio Code dla tych działań pomoże Ci lepiej pisać i uruchamiać kod w środowisku deweloperów używanym przez specjalistów na całym świecie.
Otwórz program Visual Studio Code.
Aby otworzyć program Visual Studio Code, możesz użyć menu Start systemu Windows (lub równoważnego zasobu dla innego systemu operacyjnego).
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu przejdź do folderu Pulpit systemu Windows.
Jeśli masz inną lokalizację folderu, w której są utrzymywane projekty kodu, możesz zamiast tego użyć tej lokalizacji folderu. Na potrzeby tego szkolenia ważne jest, aby mieć lokalizację, która jest łatwa do zlokalizowania i zapamiętania.
W oknie dialogowym Otwieranie folderu wybierz pozycję Wybierz folder.
Jeśli zostanie wyświetlone okno dialogowe zabezpieczeń z pytaniem, czy ufasz autorom, wybierz pozycję Tak.
W menu Terminal programu Visual Studio Code wybierz pozycję Nowy terminal.
Zwróć uwagę, że wiersz polecenia w panelu Terminal wyświetla ścieżkę folderu dla bieżącego folderu. Przykład:
C:\Users\someuser\Desktop>Uwaga / Notatka
Jeśli pracujesz na własnym komputerze, a nie w piaskownicy lub w środowisku hostowanym i ukończono inne moduły Microsoft Learn w tej serii języka C#, być może utworzono już folder projektu dla przykładów kodu. Jeśli tak jest, możesz pominąć następny krok, który służy do tworzenia aplikacji konsolowej w folderze TestProject.
W wierszu polecenia terminalu, aby utworzyć nową aplikację konsolową w określonym folderze, wprowadź następujący monit:
dotnet new console -o ./CsharpProjects/TestProjectTo polecenie interfejsu wiersza polecenia platformy .NET używa szablonu programu .NET do utworzenia nowego projektu aplikacji konsolowej języka C# w określonej lokalizacji folderu. Polecenie tworzy foldery CsharpProjects i TestProject i używa elementu TestProject jako nazwy
.csprojpliku.Jeśli zostanie wyświetlony komunikat informujący o tym, że pliki już istnieją, przejdź do następnych kroków. Użyjesz ponownie istniejących plików projektu.
W widoku EKSPLORATOR rozwiń folder CsharpProjects .
Powinien zostać wyświetlony folder TestProject i dwa pliki, plik programu C# o nazwie Program.cs i plik projektu C# o nazwie TestProject.csproj.
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu wybierz folder CsharpProjects , a następnie wybierz pozycję Wybierz folder.
W widoku EKSPLORATOR rozwiń folder TestProject, a następnie wybierz pozycję Program.cs.
Usuń istniejące wiersze kodu.
Ten projekt konsoli języka C# będzie używany do tworzenia, kompilowania i uruchamiania przykładów kodu w tym module.
Zamknij panel Terminal.
Napisz instrukcję do-while tak, aby przerwać działanie, gdy zostanie wygenerowana określona liczba losowa.
Napiszmy kod, który będzie generować liczby losowe z zakresu od 1 do 10 do momentu wygenerowania liczby 7. Może to potrwać tylko jedną iterację, aby uzyskać 7, lub może potrwać dziesiątki iteracji.
Upewnij się, że program Visual Studio Code jest otwarty, a plik Program.cs wyświetlany w panelu Edytora.
Uwaga / Notatka
Program.cs powinny być puste. Jeżeli nie jest to prawdą, wybierz i usuń wszystkie wiersze kodu.
Wpisz następujący kod w edytorze programu Visual Studio Code.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Przed utworzeniem lub uruchomieniem kodu należy zapisać plik Program.cs.
W panelu EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Zostanie otwarty panel terminalu. Terminal powinien zawierać wiersz polecenia pokazujący, że terminal jest otwarty w lokalizacji folderu TestProject.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Uwaga / Notatka
Jeśli zostanie wyświetlony komunikat "Nie można odnaleźć projektu do uruchomienia", upewnij się, że w wierszu polecenia terminalu zostanie wyświetlona oczekiwana lokalizacja folderu TestProject. Przykład:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Sprawdź swoje dane wyjściowe.
Ponieważ wygenerowane liczby są losowe, wyniki będą się różnić. Jednak wartość
7będzie ostatnią liczbą, która zostanie wydrukowana, ponieważ wyrażenie logiczne przyjmie wartośćfalsegdy zostanie wylosowana liczba 7, i przepływ wykonania opuści blok kodu.2 5 8 2 7Pośmiń chwilę na przejrzenie kodu.
Kluczową nauką dla tego pierwszego zadania jest to, że blok
do-whilekodu pętli będzie wykonywany co najmniej raz. Może iterować dużą liczbę razy i jest mało prawdopodobne, że wiemy przed upływem czasu, ile iteracji będzie.Ważne jest również, aby zauważyć, że kod wewnątrz bloku kodu ma wpływ na to, czy kontynuować iterację za pośrednictwem bloku kodu, czy nie. Blok kodu, który wpływa na kryteria zakończenia, jest głównym powodem wyboru instrukcji
do-whilelub instrukcjiwhile, zamiast jednej z innych instrukcji iteracyjnych. Zarówno elementy, jakforeachiforopierają się na czynnikach zewnętrznych bloku kodu w celu określenia liczby iteracji bloków kodu.
Napisz instrukcję while, która iteruje tylko wtedy, gdy liczba losowa jest większa niż określona wartość
Teraz spójrzmy na instrukcję while.
Użyj edytora programu Visual Studio Code, aby zaktualizować kod w następujący sposób:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");Uwaga / Notatka
W tym przypadku umieszczamy
whilesłowo kluczowe i wyrażenie logiczne przed blokiem kodu. Spowoduje to zmianę znaczenia kodu i działa jako "brama", aby umożliwić wprowadzanie przepływu wykonywania tylko wtedy, gdy wyrażenie logiczne zwróci wartość true.Zapisz plik kodu, a następnie uruchom kod przy użyciu programu Visual Studio Code.
Wprowadź
dotnet runpolecenie w wierszu polecenia terminalu, aby uruchomić kod.Przejrzyj wymienione wartości wyjściowe.
Ponieważ liczby są losowe, więc kod utworzy inną sekwencję.
9 7 5 Last number: 1Pośmiń chwilę na przejrzenie kodu.
Na początku kodu używamy
randomdo zainicjowania naszej zmiennejinto nazwiecurrent. Nasz następny aktywny wiersz kodu to naszawhileinstrukcja.Nasza
whileinstrukcja będzie iterować na podstawie logicznego wyrażenia(current >= 3). Nie wiemy, jaką wartość zostanie przypisana docurrentelementu , ale istnieją możliwości wpływające na nasząwhilepętlę:- Jeśli
currentjest inicjowany na wartość większą lub równą3, wyrażenie logiczne zwrócitrue, a przepływ wykonywania wejdzie do bloku kodu. W bloku kodu najpierw zapisujemy wartośćcurrentdo konsoli. Następnie, nadal wewnątrz bloku kodu, aktualizujemy wartośćcurrentza pomocą nowej wartości losowej. W tym momencie kontrolka wraca do góry instrukcjiwhile, w której obliczane jest wyrażenie logiczne. Ten proces jest kontynuowany do momentu, aż wyrażenie logiczne zwróci wartośćfalse, a przepływ wykonania zostanie przerwany i opuści blok kodu. - Jeśli
currentna początku naszego kodu zostanie zainicjowane na wartość mniejszą niż3, wtedy wyrażenie logiczne zwrócifalse, a blok kodu nigdy nie zostanie wykonany.
Końcowy wiersz kodu zapisuje wartość
currentw konsoli programu . Ten kod jest uruchamiany niezależnie od tego, czy blok kodu iteracji został wykonany, czy nie, i daje nam możliwość zapisania ostatecznej wartościcurrentdo konsoli.- Jeśli
Użyj instrukcji continue, aby przejść bezpośrednio do wyrażenia boolowskiego
W niektórych przypadkach chcemy przerwać wykonanie pozostałego kodu w bloku i przejść do następnej iteracji. Możemy to zrobić przy użyciu instrukcji continue .
Użyj edytora programu Visual Studio Code, aby zaktualizować kod w następujący sposób:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */Pośmiń chwilę na przejrzenie kodu.
Zwróć uwagę, że przełączyliśmy się z powrotem do
do-while. Elementdo-whilezapewnia, że pętla będzie iterować co najmniej raz.Pierwszą rzeczą, jaką robimy wewnątrz bloku kodu, jest przypisanie nowej losowej wartości do
currentelementu . Następnie sprawdzamy, czycurrentwartość jest większa niż lub równa8. Jeśli to wyrażenie zwróci wartośćtrue, słowo kluczowecontinueprzeniesie kontrolę na koniec bloku kodu, awhileoceni(current != 7). W związku z tym pętla będzie nadal iterować tak długo, jak wartośćcurrentnie jest równa7.Kluczem do tego kroku ćwiczenia jest wiersz kodu zawierający
continuesłowo kluczowe:if (current >= 8) continue;Ponieważ nasz kod, który zapisuje wartość
currentw konsoli, znajduje się poif (current >= 8) continue;, zapewnia on, że wartośćcurrent, która jest większa lub równa8, nigdy nie zostanie zapisana w oknie danych wyjściowych.Wypróbujmy to.
Zapisz plik kodu, a następnie uruchom kod przy użyciu programu Visual Studio Code.
Wprowadź
dotnet runpolecenie w wierszu polecenia terminalu, aby uruchomić kod.Przejrzyj wymienione wartości wyjściowe.
5 1 6 7Prawdopodobnie zobaczysz inne wyniki niż wyświetlane poniżej. Jednak nie zobaczysz żadnych wartości
8ani większych w oknie danych wyjściowych, zanim wykonanie kodu zakończy się wartością7.Rozważ różnicę między deklaracjami
continueibreak.Jak pokazano w tym ostatnim kroku,
continueinstrukcja przenosi wykonywanie na koniec bieżącej iteracji. To zachowanie różni się od tego, które widzieliśmy w przypadku instrukcjibreak. Instrukcjabreakkończy iterację (lubswitch) i przenosi kontrolę do instrukcji, która następuje po zakończonej instrukcji. Jeśli po zakończonej instrukcji nie ma kolejnej instrukcji, sterowanie jest przenoszone na koniec pliku lub metody.
Podsumowanie
Istnieje kilka ważnych pomysłów, które należy zabrać z tej lekcji:
- Instrukcja
do-whilewykonuje blok kodu co najmniej raz i może kontynuować iterację na podstawie wyrażenia boolowskiego. Ocena wyrażenia boolowskiego zwykle zależy od wartości, która jest generowana lub pobierana wewnątrz bloku kodu. - Instrukcja
whilenajpierw ocenia wyrażenie logiczne i kontynuuje iterowanie przez blok kodu, dopóki wyrażenie logiczne nie oceni się jakotrue. - Słowo kluczowe
continueumożliwiające natychmiastowe przejście do wyrażenia logicznego.