Ćwiczenie — tworzenie logiki decyzyjnej za pomocą instrukcji if

Ukończone

Większość aplikacji obejmuje dużą liczbę ścieżek wykonywania. Na przykład aplikacja może implementować różne ścieżki wykonywania na podstawie opcji menu wybieranej przez użytkownika. Deweloperzy odwołują się do kodu, który implementuje różne ścieżki wykonywania jako gałęzie kodu.

Najczęściej używaną instrukcją rozgałęziania if kodu jest instrukcja . Instrukcja if opiera się na wyrażeniu logicznym, które jest ujęte w zestaw nawiasów. Jeśli wyrażenie ma wartość true, kod po wykonaniu instrukcji if . Jeśli nie, środowisko uruchomieniowe platformy .NET ignoruje kod i nie wykonuje go.

W tym ćwiczeniu przećwiczyć będziesz pisanie if instrukcji, tworząc grę. Najpierw zdefiniujesz reguły gry, a następnie zaimplementujesz je w kodzie.

Użyjesz Random.Next() metody , aby zasymulować kroczenie trzech sześciostronnych kości. Obliczysz rzutowane wartości, aby obliczyć wynik. Jeśli wynik jest większy niż dowolna suma, zostanie wyświetlony zwycięski komunikat dla użytkownika. Jeśli wynik znajduje się poniżej wartości odciętej, zostanie wyświetlony komunikat o utracie dla użytkownika.

  • Jeśli na dwóch rzuconych kościach wypadnie taka sama wartość, użytkownik uzyska dwa dodatkowe punkty za wyrzucenie dubletu.
  • Jeśli na wszystkich trzech rzuconych kościach wypadnie taka sama wartość, użytkownik uzyska sześć dodatkowych punktów za wyrzucenie trypletu.
  • Jeśli suma oczek z trzech kości plus punkty dodatkowe będzie się równać 15 lub więcej, użytkownik wygrywa grę. W przeciwnym razie przegrywa.

Dowiesz się więcej na temat instrukcji if .

Ważne

To ćwiczenie intensywnie wykorzystuje klasę System.Random . Jeśli potrzebujesz odświeżenia Random.Next() , możesz zapoznać się z modułem Microsoft Learn zatytułowanym "Wywoływanie metod z biblioteki klas platformy .NET przy użyciu języka C#".

Przygotowywanie środowiska kodowania

Ten moduł zawiera działania, które prowadzą Cię przez proces tworzenia i uruchamiania przykładowego kodu. 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.

  1. Otwórz 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).

  2. W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.

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

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

  5. 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. Na przykład:

    C:\Users\someuser\Desktop>
    

    Uwaga

    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.

  6. W wierszu polecenia terminalu, aby utworzyć nową aplikację konsolową w określonym folderze, wpisz dotnet new console -o ./CsharpProjects/TestProject , a następnie naciśnij klawisz Enter.

    To 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 .csproj pliku.

  7. W panelu 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.

  8. W panelu EKSPLORATOR, aby wyświetlić plik kodu w panelu Edytor, wybierz pozycję Program.cs.

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

  10. Zamknij panel Terminal.

Pisanie kodu, który generuje trzy losowe liczby i wyświetla je w danych wyjściowych

  1. Upewnij się, że w programie Visual Studio Code jest otwarty pusty plik Program.cs.

  2. Aby utworzyć początkowy kod dla tego ćwiczenia, wprowadź następujące polecenie:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    
  3. Pośmiń chwilę na przejrzenie wprowadzonego kodu.

    Aby rozpocząć, należy utworzyć nowe wystąpienie System.Random klasy i zapisać odwołanie do obiektu w zmiennej o nazwie dice. Następnie wywołasz metodę Random.Next() w dice obiekcie trzy razy, podając zarówno dolne, jak i górne granice, aby ograniczyć możliwe wartości między 1 i 6 (górna granica jest wyłączna). Należy zapisać trzy losowe liczby odpowiednio w zmiennych roll1, roll2i roll3.

    Następnie zsumujesz trzy rzuty kostkami i zapiszesz wartość w zmiennej całkowitej o nazwie total.

    Na koniec użyjesz WriteLine() metody , aby wyświetlić trzy wartości przy użyciu interpolacji ciągów.

    Po uruchomieniu kodu powinien zostać wyświetlony następujący komunikat (liczby będą inne).

    Dice roll: 4 + 5 + 2 = 11
    
    

    To pierwsze zadanie było zadaniem konfiguracji. Teraz możesz dodać logikę decyzyjną do kodu, aby gra bardziej interesująca.

Dodawanie instrukcji if w celu wyświetlenia różnych komunikatów na podstawie wartości zmiennej totalnej

  1. W Edytorze programu Visual Studio Code znajdź kursor w dolnej części pliku kodu, a następnie utwórz pusty wiersz kodu.

  2. Aby utworzyć pierwszą funkcję gry, wprowadź następujące if instrukcje.

    if (total > 14)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    

    Te dwie if instrukcje służą do obsługi zwycięskich i przegranych scenariuszy. Pośmiń minutę, aby zbadać pierwszą if instrukcję.

    Zwróć uwagę, że instrukcja if składa się z trzech części:

    • Słowo kluczowe if
    • Wyrażenie logiczne między nawiasami ()
    • Blok kodu zdefiniowany przez nawiasy klamrowe { }

    W czasie wykonywania oceniane jest wyrażenie logiczne total > 14. Jeśli jest to prawdziwa instrukcja (jeśli wartość total jest większa niż 14) przepływ wykonywania będzie kontynuowany do kodu zdefiniowanego w bloku kodu. Innymi słowy, zostanie wykonany kod w nawiasach klamrowych.

    Jeśli jednak wyrażenie logiczne ma wartość false (wartość total nie jest większa niż 14), przepływ wykonywania zostanie pominięty obok bloku kodu. Innymi słowy, kod w nawiasach klamrowych nie zostanie wykonany.

    Druga instrukcja if steruje komunikatem w przypadku przegranej użytkownika. W następnej lekcji użyjesz odmiany instrukcji if , aby skrócić te dwie instrukcje do pojedynczej instrukcji, która wyraźniej wyraża intencję.

Co to jest wyrażenie warunkowe?

Wyrażenie logiczne to dowolny kod, który zwraca wartość logiczną lub truefalse. Najprostsze wyrażenia logiczne to po prostu wartości true i false. Alternatywnie wyrażenie logiczne może być wynikiem metody zwracającej wartość true lub false. Poniżej przedstawiono przykład prostego kodu, w którym użyto metody string.Contains() do ocenienia, czy jeden ciąg zawiera inny ciąg.

string message = "The quick brown fox jumps over the lazy dog.";
bool result = message.Contains("dog");
Console.WriteLine(result);

if (message.Contains("fox"))
{
    Console.WriteLine("What does the fox say?");
}

message.Contains("fox") Ponieważ funkcja zwraca true wartość lubfalse, kwalifikuje się jako wyrażenie logiczne i może być używana w instrukcji if .

Inne proste wyrażenia logiczne można utworzyć przy użyciu operatorów do porównywania dwóch wartości. Operatory mogą być następujące:

  • ==, operator "equals" do testowania pod kątem równości
  • >, operator "greater than", aby sprawdzić, czy wartość po lewej stronie jest większa niż wartość po prawej stronie
  • <, operator "less than", aby sprawdzić, czy wartość po lewej stronie jest mniejsza niż wartość po prawej stronie
  • >=, „operator większe niż lub równe”
  • <=, „operator mniejsze niż lub równe”
  • i tak dalej

Uwaga

Seria szkoleniowa języka C# w środowisku Microsoft Learn poświęca cały moduł w wyrażeniach logicznych. Istnieje wiele operatorów, których można użyć do konstruowania wyrażenia logicznego. W tym module omówimy tylko kilka podstawowych elementów. Aby uzyskać więcej informacji na temat wyrażeń logicznych, zobacz moduł Microsoft Learn zatytułowany "Evaluate Boolean expressions to make decisions in C#" (Ocenianie wyrażeń logicznych w języku C#).

W tym przykładzie oceniono wyrażenie total > 14logiczne . Można jednak wybrać wyrażenie total >= 15 logiczne, ponieważ w tym przypadku są one takie same. Biorąc pod uwagę, że zasady gry określają "Jeśli suma trzech kości, plus jakiekolwiek premie, wynosi 15 lub więcej, wygrasz grę", prawdopodobnie należy zaimplementować >= 15 wyrażenie. Wprowadzisz te zmiany w następnym kroku ćwiczenia.

Co to jest blok kodu?

Blok kodu to kolekcja jednego lub kilku wierszy kodu, które są zdefiniowane przez otwierający i zamykający symbol nawiasu klamrowego { }. Reprezentuje pełną jednostkę kodu, która ma jeden cel w systemie oprogramowania. W tym przypadku w czasie wykonywania wszystkie wiersze kodu w bloku kodu są wykonywane, jeśli wyrażenie logiczne ma wartość true. Z drugiej strony, jeśli wyrażenie logiczne jest fałszywe, wszystkie wiersze kodu w bloku kodu są ignorowane.

Należy również wiedzieć, że bloki kodu mogą zawierać inne bloki kodu. W rzeczywistości jeden blok kodu jest często "zagnieżdżony" wewnątrz innego bloku kodu w aplikacjach. Rozpoczniesz zagnieżdżanie własnych bloków kodu w dalszej części tego modułu podczas tworzenia jednej if instrukcji wewnątrz bloku kodu innego.

Uwaga

Seria szkoleniowa języka C# w witrynie Microsoft Learn poświęca cały moduł do zrozumienia bloków kodu. Bloki kodu mają kluczowe znaczenie dla zrozumienia organizacji i struktury kodu oraz definiują granice zakresu zmiennych. Zobacz moduł [Control variable scope and logic using code blocks in C#](TBD).

Dodaj kolejną instrukcję if, aby zaimplementować bonus doubles

Następnie możesz zaimplementować regułę: "Jeśli dowolne dwie kostki przerzucisz wynik w tej samej wartości, otrzymasz dwa punkty bonusowe dla kroczenia podwójne". Zmodyfikuj kod z poprzedniego kroku, aby był zgodny z następującą listą kodu:

  1. W Edytorze programu Visual Studio Code znajdź kursor w pustym wierszu kodu powyżej pierwszej if instrukcji.

  2. Aby utworzyć funkcję gry "doubles", wprowadź następującą if instrukcję.

    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    

    W tym miejscu połączysz trzy wyrażenia logiczne, aby utworzyć jedno złożone wyrażenie logiczne w jednym wierszu kodu. Jest to czasami nazywane warunkiem złożonym. Masz jeden zewnętrzny zestaw nawiasów, który łączy trzy wewnętrzne zestawy nawiasów oddzielone dwoma znakami potoku.

    Znak podwójnej kreski pionowej || jest logicznym operatorem OR (LUB), który w istocie mówi „wyrażenie po mojej lewej stronie LUB wyrażenie po mojej prawej stronie musi być prawdziwe, aby całe wyrażenie logiczne było prawdziwe”. Jeśli oba wyrażenia logiczne są fałszywe, całe wyrażenie logiczne jest fałszywe. Używasz dwóch operatorów logicznych OR, aby można było rozszerzyć ocenę na trzecie wyrażenie logiczne.

    Najpierw należy ocenić wartość (roll1 == roll2). Jeśli jest ono prawdziwe, to całe wyrażenie jest prawdziwe. Jeśli jest to fałsz, ocenisz wartość (roll2 == roll3). Jeśli jest ono prawdziwe, to całe wyrażenie jest prawdziwe. Jeśli jest to fałsz, ocenisz wartość (roll1 == roll3). Jeśli jest ono prawdziwe, to całe wyrażenie jest prawdziwe. Jeśli jest ono fałszywe, to całe wyrażenie jest fałszywe.

    Jeśli wyrażenie logiczne złożone ma wartość true, wykonaj następujący blok kodu. Tym razem mamy dwa wiersze kodu. Pierwszy wiersz kodu drukuje komunikat do użytkownika. Drugi wiersz kodu zwiększa wartość elementu total o 2.

  3. Aby zwiększyć czytelność kodu, zaktualizuj drugą if instrukcję w następujący sposób:

    if (total >= 15)
    

    Zwróć uwagę, że teraz używasz operatora w wyrażeniu >= , które jest używane do oceny zwycięskiego rzutu. Operator >= oznacza "większe lub równe". W związku z tym można porównać total wartość 15 zamiast 14. Dzięki tym zmianom wyrażenie, którego używasz do oceny zwycięskiego rzutu, przypomina teraz wyrażenie, które oceniasz dla utraty rzutu. Powinno to ułatwić zrozumienie kodu (bardziej czytelne). Ponieważ masz do czynienia z wartościami całkowitymi, nowe wyrażenie (total >= 15) będzie działać identycznie z tym, co napisaliśmy wcześniej (total > 14).

  4. Pośmiń chwilę na przejrzenie kodu.

    Kod powinien być zgodny z następującym:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }    
    

    Zwróć uwagę na ulepszone wyrównanie między wyrażeniami używanymi do oceniania zwycięskich i przegranych rzutów.

Dodaj kolejną instrukcję if, aby zaimplementować premię triples

Następnie możesz zaimplementować regułę: "Jeśli wszystkie trzy kostki rzutują wynik w tej samej wartości, otrzymasz sześć punktów bonusowych za kroczenie potrójne". Zmodyfikuj kod z poprzednich kroków, aby był zgodny z następującą listą kodu:

  1. W edytorze programu Visual Studio Code utwórz pusty wiersz kodu poniżej bloku kodu instrukcji "doubles". if

  2. Aby utworzyć funkcję gry "triples", wprowadź następującą if instrukcję.

    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    

    W tym miejscu połączysz dwa wyrażenia logiczne, aby utworzyć jedno złożone wyrażenie logiczne w jednym wierszu kodu. Masz jeden zewnętrzny zestaw nawiasów, który łączy dwa wewnętrzne zestawy nawiasów oddzielone dwoma znakami i znakami.

    Podwójny znak ampersand && to logiczny operator AND (ORAZ), który w istocie mówi „tylko wtedy, gdy oba wyrażenia są prawdziwe, całe wyrażenie jest prawdziwe”. W tym przypadku, jeśli zmienna roll1 jest równa zmiennej roll2, a zmienna roll2 jest równa zmiennej roll3, to wynika z tego, że zmienna roll1 musi być równa zmiennej roll3, co oznacza, że użytkownik wyrzucił tryplet.

  3. W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.

  4. Pośmiń chwilę na przejrzenie kodu.

    Upewnij się, że kod jest zgodny z następującymi elementami:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    
  5. 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.

    Panel terminalu powinien zostać otwarty i powinien zawierać wiersz polecenia pokazujący, że terminal jest otwarty w lokalizacji folderu TestProject.

  6. W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij klawisz Enter.

    Uwaga

    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. Na przykład: C:\Users\someuser\Desktop\csharpprojects\TestProject>.

    Powinny zostać wyświetlone dane wyjściowe podobne do jednego z następujących wyników:

    Dice roll: 3 + 6 + 1 = 10
    Sorry, you lose.
    
    

    Lub do następującego:

    Dice roll: 1 + 4 + 4 = 9
    You rolled doubles! +2 bonus to total!
    Sorry, you lose.
    
    

    Lub do następującego:

    Dice roll: 5 + 6 + 4 = 15
    You win!
    
    

    Lub, jeśli masz szczęście, zobaczysz następujący wynik:

    Dice roll: 6 + 6 + 6 = 18
    You rolled doubles! +2 bonus to total!
    You rolled triples! +6 bonus to total!
    You win!
    
    

    Ale czekać, czy naprawdę nagrodzić gracza zarówno potrójnym bonusem, jak i podwójną premią? W końcu rzut potrójnych oznacza, że również walcowane podwójne. Najlepiej, że premie nie powinny stosu. Powinny istnieć dwa oddzielne warunki bonusowe. Jest to usterka w logice, która będzie musiała zostać poprawiona.

Problemy z logiką i możliwościami ulepszania kodu

Chociaż jest to dobry początek i wiesz już wiele na temat if instrukcji, wyrażeń logicznych, bloków kodu, operatorów logicznych LUB i AND itd., wiele można poprawić. Zrobisz to w następnej lekcji.

Podsumowanie

  • Używaj instrukcji if w celu rozgałęziania logiki kodu. Instrukcja decyzyjna if wykona kod w swoim bloku kodu, jeśli jej wyrażenie logiczne będzie miało wartość true. W przeciwnym razie środowisko uruchomieniowe pominie ten blok kodu i przejdzie do następnego wiersza kodu za blokiem kodu.
  • Wyrażenie logiczne to dowolne wyrażenie zwracające wartość logiczną.
  • Operatory logiczne porównują dwie wartości po swojej lewej stronie i prawej stronie pod kątem równości, porównania i nie tylko.
  • Blok kodu jest definiowany za pomocą nawiasów klamrowych { }. Zawiera on wiersze kodu, które powinny być traktowane jako pojedyncza jednostka.
  • Operator logiczny AND && agreguje dwa wyrażenia w taki sposób, że oba podwyrażenia muszą mieć wartość true, aby całe wyrażenie miało wartość true.
  • Operator logiczny OR || agreguje dwa wyrażenia w taki sposób, że gdy jedno podwyrażenie ma wartość true, to całe wyrażenie ma wartość true.

Sprawdź swoją wiedzę

1.

Co to jest blok kodu?

2.

Co to jest instrukcja logiczna lub wyrażenie?