Instrukcje i pętle języka C# if — samouczek dotyczący logiki warunkowej

W tym samouczku pokazano, jak napisać kod w języku C#, który analizuje zmienne i zmienia ścieżkę wykonywania na podstawie tych zmiennych. Napiszesz kod w języku C# i zobaczysz wyniki kompilowania i uruchamiania go. Samouczek zawiera serię lekcji, które eksplorują konstrukcje rozgałęziania i tworzenia pętli w języku C#. Te lekcje umożliwiają poznanie podstaw języka C#.

Porada

Aby wkleić fragment kodu w trybie koncentracji uwagi , należy użyć skrótu klawiaturowego (Ctrl + v lub cmd + v).

Wymagania wstępne

Samouczek oczekuje, że masz maszynę skonfigurowaną na potrzeby programowania lokalnego. Zobacz Konfigurowanie środowiska lokalnego , aby uzyskać instrukcje instalacji i omówienie tworzenia aplikacji na platformie .NET.

Jeśli wolisz uruchomić kod bez konieczności konfigurowania środowiska lokalnego, zobacz interaktywną wersję tego samouczka w przeglądarce.

Podejmowanie decyzji przy użyciu instrukcji if

Utwórz katalog o nazwie branches-tutorial. Upewnij się, że bieżący katalog i uruchom następujące polecenie:

dotnet new console -n BranchesAndLoops -o .

Ważne

Szablony języka C# dla platformy .NET 6 używają instrukcji najwyższego poziomu. Aplikacja może nie być zgodna z kodem w tym artykule, jeśli została już uaktualniona do platformy .NET 6. Aby uzyskać więcej informacji, zobacz artykuł dotyczący nowych szablonów języka C# generowania instrukcji najwyższego poziomu

Zestaw SDK platformy .NET 6 dodaje również zestaw niejawnychglobal using dyrektyw dla projektów korzystających z następujących zestawów SDK:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Te niejawne global using dyrektywy obejmują najbardziej typowe przestrzenie nazw dla typu projektu.

Aby uzyskać więcej informacji, zobacz artykuł dotyczący niejawnych dyrektyw using

To polecenie tworzy nową aplikację konsolową .NET w bieżącym katalogu. Otwórz plik Program.cs w ulubionym edytorze i zastąp zawartość następującym kodem:

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

Wypróbuj ten kod, wpisując dotnet run polecenie w oknie konsoli. Powinien zostać wyświetlony komunikat "Odpowiedź jest większa niż 10". Zostanie wyświetlona w konsoli. Zmodyfikuj deklarację zmiennej b, tak aby suma była mniejsza niż 10:

int b = 3;

Wpisz dotnet run ponownie. 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.

Porada

Podczas nauki języka C# (lub dowolnego języka programowania) będziesz robić błędy przy pisaniu kodu. Kompilator znajdzie i zgłosi błędy. Przyjrzyj się bliżej danym wyjściowym błędu i kodowi, który wygenerował błąd. Błąd kompilatora może zwykle pomóc w znalezieniu problemu.

Ten pierwszy przykład przedstawia moc typów logicznych if i . Wartość logiczna to zmienna, która może mieć jedną z dwóch wartości: true lub false. Język C# definiuje specjalny typ bool dla zmiennych logicznych. 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.

Łą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. else Wypróbuj gałąź. Dodaj dwa ostatnie wiersze w poniższym kodzie (powinny już istnieć pierwsze cztery):

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 if warunków logicznych i else z nimi zapewnia całą moc, którą należy obsłużyć zarówno warunek, jak truefalse i .

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ć instrukcji { i } wskazać, kiedy chcesz, aby więcej niż jedna instrukcja należała do bloku, który jest wykonywany 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. Zmodyfikuj powyższy kod, aby był zgodny z następującym kodem:

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");
}

Porada

W pozostałej części tego samouczka wszystkie przykłady kodu obejmują nawiasy klamrowe, zgodnie z zaakceptowanymi rozwiązaniami.

Możesz przetestować bardziej skomplikowane warunki. Dodaj następujący kod po kodzie, który został napisany do tej pory:

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ć || elementu do reprezentowania ciągu "lub". Dodaj następujący kod po tym, co zostało napisane do tej pory:

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, bi c i przełączaj się między elementami && i || , aby je eksplorować. Dowiesz się, jak && działają operatory i || .

Pierwszy krok został ukończony. Przed rozpoczęciem następnej sekcji przenieśmy bieżący kod do oddzielnej metody. Ułatwia to rozpoczęcie pracy z nowym przykładem. Umieść istniejący kod w metodzie o nazwie ExploreIf(). Wywołaj go z góry programu. Po zakończeniu tych zmian kod powinien wyglądać następująco:

ExploreIf();

void ExploreIf()
{
    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");
    }

    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 greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

Oznacz jako komentarz wywołanie metody ExploreIf(). Dzięki temu dane wyjściowe będą mniej zaśmiecone podczas pracy w tej sekcji:

//ExploreIf();

Spowoduje to // uruchomienie komentarza w języku C#. Komentarze to dowolny tekst, który chcesz zachować w kodzie źródłowym, ale nie jest wykonywany jako kod. Kompilator nie generuje żadnego kodu wykonywalnego z komentarzy.

Użycie pętli do powtarzania operacji

W tej sekcji użyjesz pętli do powtarzania instrukcji . Dodaj ten kod po wywołaniu metody ExploreIf:

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

Instrukcja while sprawdza warunek i wykonuje blok instrukcji lub instrukcji po while. Wielokrotnie sprawdza warunek, wykonując te instrukcje, dopóki warunek nie będzie spełniony.

Ten przykład zawiera jeszcze jeden nowy operator. Znaki ++ po zmiennej counter oznaczają operator inkrementacji. Dodaje wartość 1 do wartości counter i przechowuje ją w zmiennej counter .

Ważne

Upewnij się, że while warunek pętli zmienia się na false podczas wykonywania kodu. W przeciwnym razie wystąpi pętla nieskończona, czyli wykonywanie programu nigdy się nie skończy. To nie jest pokazane w tym przykładzie, ponieważ trzeba wymusić zamknięcie programu przy użyciu klawiszy CTRL-C lub innych środków.

Pętla while testuje warunek przed wykonaniem kodu po instrukcji while. Pętla do...while najpierw wykonuje kod, a następnie sprawdza warunek. Pętla do wykonania jest wyświetlana w następującym kodzie:

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

Ta do pętla i wcześniejsza while pętla generują te same dane wyjściowe.

Praca z pętlą for

Pętla for jest często używana w języku C#. Wypróbuj ten kod:

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

Poprzedni kod wykonuje tę samą pracę co while pętla i do już użyta pętla. Instrukcja for składa się z trzech części, które sterują jej pracą.

Pierwsza część to inicjator:int index = 0; deklaruje, że index jest zmienną pętli i ustawia jej wartość początkową na 0.

Środkowa część jest warunkiem: index < 10 deklaruje, że ta for pętla będzie nadal wykonywana, o ile wartość licznika jest mniejsza niż 10.

Ostatnią częścią jest iterator: index++ określa sposób modyfikowania zmiennej pętli po wykonaniu bloku po instrukcji for . Tutaj zdefiniowano, że zmienną index należy zwiększyć o 1 po każdym wykonaniu bloku.

Eksperymentuj samodzielnie. Wypróbuj każdą z następujących odmian:

  • 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.

Istnieje jedna inna instrukcja pętli, która nie jest omówiona w tym samouczku: instrukcja foreach . Instrukcja foreach powtarza instrukcję dla każdego elementu w sekwencji elementów. Jest on najczęściej używany z kolekcjami, więc został omówiony w następnym samouczku.

Utworzone zagnieżdżone pętle

Pętlę while, dolub for można zagnieżdżać 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 for pętla 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, aby utworzyć pary:

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 przebiegu pętli wewnętrznej. Odwróć zagnieżdżanie wierszy i kolumn i zobacz zmiany dla siebie. Po zakończeniu umieść kod z tej sekcji w metodzie o nazwie ExploreLoops().

Łą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. Otrzymasz 63 odpowiedzi. Możesz zobaczyć jedną możliwą odpowiedź, wyświetlając ukończony kod w usłudze GitHub.

Ukończono samouczek "gałęzie i pętle".

Możesz kontynuować pracę z samouczkiem Tablice i kolekcje we własnym środowisku projektowym.

Więcej informacji na temat tych pojęć można uzyskać w następujących artykułach: