Poznaj logikę warunkową za pomocą instrukcji branch and loop
W tym samouczku przedstawiono sposób pisania kodu, który analizuje zmienne i zmienia ścieżkę wykonywania na podstawie tych zmiennych. Użyjesz przeglądarki do interaktywnego pisania kodu w języku C# oraz wyświetlania wyniku kompilacji i uruchomienia kodu. Ten samouczek zawiera serię lekcji, które eksplorują konstrukcje rozgałęziania i pętli w języku C#. Te lekcje umożliwiają poznanie podstaw języka C#.
Napiwek
Aby wkleić fragment kodu w trybie koncentracji uwagi, należy użyć skrótu klawiaturowego (Ctrl + v lub cmd + v).
Podejmowanie decyzji za pomocą instrukcji if
Uruchom poniższy kod w oknie interaktywnym. Wybierz przycisk Enter focus mode (Wprowadź tryb koncentracji uwagi). Następnie wpisz następujący blok kodu w oknie interaktywnym i wybierz pozycję Uruchom:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");
Jeśli korzystasz z tego w środowisku, należy zamiast tego postępować zgodnie z instrukcjami dotyczącymi wersji lokalnej.
Zmodyfikuj deklarację zmiennej b
, tak aby suma była mniejsza niż 10:
int b = 3;
Ponownie wybierz przycisk Uruchom. Ponieważ odpowiedź jest mniejsza niż 10, nic nie zostanie wyświetlone. Testowany warunek ma wartość false. Nie ma żadnego kodu do wykonania, ponieważ napisano kod tylko dla jednej z możliwych gałęzi instrukcji if
: wykonywanej dla wartości true.
Napiwek
Podczas nauki języka C# (lub dowolnego języka programowania) będziesz robić błędy przy pisaniu kodu. Kompilator znajdzie te błędy i zgłosi je. Jeśli dane wyjściowe zawierają komunikaty o błędach, sprawdź uważnie przykładowy kod oraz kod w oknie interaktywnym, aby znaleźć fragmenty wymagające poprawienia. To ćwiczenie pomoże Ci poznać strukturę kodu w języku C#.
Pierwszy przykład przedstawia możliwości instrukcji if
i typów logicznych. Zmienna typu logicznego to zmienna, która może mieć jedną z dwóch wartości: true
lub false
. Język C# definiuje specjalny typ dla zmiennych logicznych: bool
. Instrukcja if
umożliwia sprawdzenie wartości typu bool
. Jeśli wartość to true
, zostanie wykonana instrukcja następująca po instrukcji if
. W przeciwnym razie zostanie pominięty.
Ten proces sprawdzania warunków i wykonywania instrukcji na podstawie tych warunków jest zaawansowany. Dowiedzmy się więcej.
Łączenie działania instrukcji if i else
Aby wykonać różny kod w gałęziach dla wartości true i false, należy utworzyć gałąź else
wykonywaną, jeśli wartość warunku to false. Wypróbuj te metody:
int a = 5;
int b = 3;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10");
else
Console.WriteLine("The answer is not greater than 10");
Instrukcja po słowie kluczowym else
jest wykonywana tylko wtedy, gdy testowany warunek ma wartość false
. Połączenie instrukcji if
i else
za pomocą warunków logicznych daje wszelkie potrzebne możliwości.
Ważne
Wcięcia pod instrukcjami if
i else
służą tylko do zwiększenia czytelności.
Język C# nie traktuje wcięcia ani białych znaków jako znaczących.
Instrukcja po słowie kluczowym if
lub else
zostanie wykonana w zależności od warunku. Wszystkie przykłady w tym samouczku są zgodne z powszechną praktyką dotyczącą wcięcia wierszy na podstawie przepływu sterowania instrukcji.
Ponieważ wcięcie nie jest znaczące, należy użyć polecenia {
i }
wskazać, kiedy chcesz, aby więcej niż jedna instrukcja należała do bloku wykonywanego warunkowo. Programiści języka C# zazwyczaj używają nawiasów klamrowych we wszystkich klauzulach if
i else
. Poniższy przykład jest taki sam jak utworzony przez Ciebie. Wypróbuj.
int a = 5;
int b = 3;
if (a + b > 10)
{
Console.WriteLine("The answer is greater than 10");
}
else
{
Console.WriteLine("The answer is not greater than 10");
}
Napiwek
W pozostałej części tego samouczka wszystkie przykłady kodu obejmują nawiasy klamrowe, zgodnie z zaakceptowaną praktyką.
Istnieje możliwość testowania bardziej skomplikowanych warunków:
int a = 5;
int b = 3;
int c = 4;
if ((a + b + c > 10) && (a == b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("And the first number is equal to the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("Or the first number is not equal to the second");
}
Symbol ==
testuje równość. Użycie ==
funkcji rozróżnia test równości od przypisania, który został wyświetlony w pliku a = 5
.
Znaki &&
określają warunek „i”. Oznacza to, że instrukcja w gałęzi dla wartości true zostanie wykonana tylko wtedy, gdy oba warunki będą mieć wartość true. Te przykłady przedstawiają także, że można użyć wielu instrukcji w każdej gałęzi warunkowej, jeśli zostaną umieszczone między znakami {
i }
.
Można również użyć ||
funkcji do reprezentowania ciągu "lub":
int a = 5;
int b = 3;
int c = 4;
if ((a + b + c > 10) || (a == b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("Or the first number is equal to the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("And the first number is not equal to the second");
}
Zmodyfikuj wartości a
, b
i c
przełączaj się między ||
&&
i, aby eksplorować. Dowiesz się, jak &&
działają operatory i ||
.
Użycie pętli do powtarzania operacji
Innym pojęciem ważnym dla tworzenia większych programów są pętle. Pętle służą do powtarzania instrukcji, które mają być wykonane więcej niż raz. Wypróbuj ten kod w oknie interaktywnym:
int counter = 0;
while (counter < 10)
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
}
Instrukcja while
sprawdza warunek i wykonuje instrukcję po instrukcji while
. Sprawdzanie warunku i wykonywanie instrukcji będzie powtarzane do momentu, gdy warunek będzie mieć wartość false.
Ten przykład zawiera jeszcze jeden nowy operator. Znaki ++
po zmiennej counter
oznaczają operator inkrementacji. Dodaje on 1 do wartości counter i zapisuje wynikową wartość w zmiennej counter.
Ważne
Upewnij się, że warunek pętli while
przyjmie wartość false podczas wykonywania kodu. W przeciwnym razie wystąpi pętla nieskończona, czyli wykonywanie programu nigdy się nie skończy. Nie będziemy tego przedstawiać, ponieważ aparat uruchamiający kod przekroczy limit czasu i żadne dane wyjściowe programu nie zostaną wyświetlone.
Pętla while
testuje warunek przed wykonaniem kodu po instrukcji while
. Pętla do
...while
najpierw wykonuje kod, a następnie sprawdza warunek. Wygląda to tak:
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
Pętla do
i wcześniejsza pętla while
działają tak samo.
Przejdźmy do ostatniej instrukcji pętli.
Praca z pętlą for
Inna powszechnie używana w kodzie C# instrukcja pętli to pętla for
. Wypróbuj ten kod w oknie interaktywnym:
for (int counter = 0; counter < 10; counter++)
{
Console.WriteLine($"Hello World! The counter is {counter}");
}
Działa on tak samo jak już przedstawione pętle while
i do
. Instrukcja for
składa się z trzech części, które sterują jej pracą.
Pierwsza część to inicjator: element int counter = 0;
deklaruje zmienną counter
jako zmienną pętli i ustawia jej wartość początkową na 0
.
Środkowa część to warunek: element counter < 10
określa, że pętla for
jest powtarzana tak długo, jak długo wartość zmiennej counter jest mniejsza od 10.
Ostatnia część to iterator: counter++
określa, jak jest modyfikowana zmienna pętli po wykonaniu bloku występującego po instrukcji for
. Tutaj zdefiniowano, że zmienną counter
należy zwiększyć o 1 po każdym wykonaniu bloku.
Poeksperymentuj samodzielnie z tymi elementami. Wypróbuj poniższe modyfikacje:
- Zmień inicjator, tak aby miał inną wartość początkową.
- Zmień warunek, tak aby zatrzymanie pętli nastąpiło przy innej wartości.
Gdy skończysz, przejdziemy do samodzielnego pisania kodu, gdzie wykorzystasz zdobyte umiejętności.
W tym samouczku nie opisano jeszcze jednej innej instrukcji pętli: instrukcji foreach
. Instrukcja foreach
powtarza instrukcję dla każdego elementu w sekwencji elementów. Jest ona najczęściej używana z kolekcjami, dlatego jest omówiona w następnym samouczku.
Utworzone zagnieżdżone pętle
Pętla while
, do
lub for
może być zagnieżdżona wewnątrz innej pętli, aby utworzyć macierz przy użyciu kombinacji każdego elementu w pętli zewnętrznej z każdym elementem w pętli wewnętrznej. Zróbmy to, aby utworzyć zestaw par alfanumerycznych reprezentujących wiersze i kolumny.
Jedna pętla for
może wygenerować wiersze:
for (int row = 1; row < 11; row++)
{
Console.WriteLine($"The row is {row}");
}
Kolejna pętla może wygenerować kolumny:
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The column is {column}");
}
Można zagnieżdżać jedną pętlę wewnątrz drugiej do tworzenia par:
for (int row = 1; row < 11; row++)
{
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The cell is ({row}, {column})");
}
}
Widać, że pętla zewnętrzna zwiększa się raz dla każdego pełnego uruchomienia pętli wewnętrznej. Odwrócić zagnieżdżanie wierszy i kolumn i zobaczyć zmiany dla siebie.
Łączenie gałęzi i pętli
Teraz, gdy znasz już instrukcję if
i konstrukcje pętli w języku C#, sprawdź, czy potrafisz napisać kod C# obliczający sumę wszystkich liczb całkowitych z zakresu 1-20 podzielnych przez 3. Oto kilka wskazówek:
- Operator
%
umożliwia obliczenie reszty z operacji dzielenia. - Instrukcja
if
umożliwia zdefiniowanie warunku określającego, czy liczba powinna być częścią sumy. - Pętla
for
ułatwia powtórzenie serii kroków dla wszystkich liczb z zakresu 1-20.
Spróbuj napisać kod. Następnie wykonaj go, aby dowiedzieć się, jak Ci poszło. Wskazówka: odpowiedź powinna wynosić 63.
Ukończenie wyzwania
Czy Twój pomysł był podobny do poniższego?
int sum = 0;
for (int number = 1; number < 21; number++)
{
if (number % 3 == 0)
{
sum = sum + number;
}
}
Console.WriteLine($"The sum is {sum}");
Gratulacje!
Ukończono interaktywny samouczek "pętli i gałęzi". Możesz wybrać poniższy link do kolekcji list, aby rozpocząć kolejny interaktywny samouczek, lub odwiedzić witrynę platformy .NET, aby pobrać zestaw .NET SDK, utworzyć projekt na maszynie i kontynuować kodowanie. Sekcja "Następne kroki" umożliwia powrót do tych samouczków.
Więcej informacji na temat tych pojęć można uzyskać w następujących artykułach:
Widzisz problem w tej sekcji? W takim przypadku prześlij opinię, abyśmy mogli udoskonalić tę sekcję.