Ćwiczenie — tworzenie zagnieżdżonej logiki decyzyjnej za pomocą polecenia if, else if i else

Ukończone

W poprzedniej lekcji użyto wielu if instrukcji do zaimplementowania reguł gry. Jednak na końcu lekcji zauważyliśmy, że potrzebne są bardziej wyraziste if instrukcje, aby naprawić subtelną usterkę w kodzie.

W tym ćwiczeniu użyjesz ifinstrukcji , elsei else if , aby ulepszyć opcje rozgałęziania w kodzie i naprawić usterkę logiki.

Użyj instrukcji if i else zamiast dwóch oddzielnych instrukcji if

Zamiast wykonywać dwa testy w celu wyświetlenia komunikatu "Wygrasz!" lub "Niestety, przegrywasz", użyjesz słowa kluczowego else .

  1. Upewnij się, że kod Program.cs 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.");
    }
    
    

    Jest to kod, który został ukończony w poprzedniej lekcji.

  2. Pośmiń minutę, aby zbadać dwie if instrukcje na końcu pliku:

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

    Zwróć uwagę, że obie if instrukcje są porównywane total z tą samą wartością liczbową. Jest to idealna okazja, aby użyć instrukcji else .

  3. Zaktualizuj dwie if instrukcje w następujący sposób:

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

    W tym miejscu, jeśli total >= 15 ma wartość false, blok kodu po słowie else kluczowym zostanie wykonany. Ponieważ dwa wyniki są powiązane przeciwieństwami, jest to idealny scenariusz dla słowa kluczowego else .

  4. Zaktualizowany plik Program.cs powinien zawierać następujący kod:

    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!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

Zmodyfikuj kod, aby usunąć premię stosu dla podwójnych i potrójnych przy użyciu zagnieżdżania

W poprzedniej lekcji pokazano, że w aplikacji wprowadzono subtelną usterkę logiki. Ten problem można rozwiązać, zagnieżdżając instrukcje if .

Zagnieżdżanie umożliwia umieszczenie bloków kodu wewnątrz bloków kodu. W takim przypadku zagnieżdżasz kombinację if i else (sprawdzanie pod kątem podwojeń) wewnątrz innej if instrukcji (sprawdzanie potrójnych), aby zapobiec przyznaniu obu premii.

  1. Zmodyfikuj swój kod, tak aby 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))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    
  2. Przejrzyj zagnieżdżone if instrukcje.

    Celem jest utworzenie if-else wewnętrznej konstrukcji, w której dwa wyniki są powiązane przeciwieństwa, a następnie użyć przeciwnych wyników (jeśli/prawda i inne/fałsz), aby przyznać punkty bonusowe za potrójne i podwójne. Aby osiągnąć ten cel, należy sprawdzić podwajać w instrukcji zewnętrznej if , a następnie w przypadku potrójnych w instrukcji wewnętrznej if . Ten wzorzec gwarantuje, że gdy wewnętrzna kontrola dla potrójnych zwraca falsewartość , else blok kodu może przyznać punkty za podwójne.

    Wymyślisz "hard code" wyniki trzech rzutów, aby przetestować logikę kodu.

  3. Utwórz pusty wiersz kodu powyżej wiersza, w którym total jest zadeklarowany i zainicjowany.

  4. Aby przetestować rzut podwaja, wprowadź następujący kod:

    roll1 = 6;
    roll2 = 6;
    roll3 = 5;
    

    Kodowanie na stałe trzech roll zmiennych umożliwia przetestowanie kodu bez konieczności uruchamiania aplikacji dziesiątki razy.

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

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

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

    Po uruchomieniu kodu powinny zostać wyświetlone następujące elementy:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Aby przetestować rolkę potrójnych, zaktualizuj zakodowane zmienne rzutu w następujący sposób:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.

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

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

    Po uruchomieniu kodu powinny zostać wyświetlone następujące elementy:

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

Użyj instrukcji if, else i else if, aby dać nagrodę zamiast komunikatu win-lose

Aby gra bardziej zabawna, możesz zmienić grę z "win-or-lose", aby przyznać fikcyjne nagrody za każdy wynik. Możesz zaoferować cztery nagrody. Jednak gracz powinien wygrać tylko jedną nagrodę:

  • Jeśli gracz uzyska wynik równy lub większy niż 16, otrzyma nowy samochód.
  • Jeśli gracz uzyska wynik równy lub większy niż 10, otrzyma nowego laptopa.
  • Jeśli gracz uzyska wynik równy dokładnie 7, wygra wycieczkę.
  • W przeciwnym razie gracz wygra małego kotka.
  1. Zmodyfikuj kod z poprzednich kroków, aby 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))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    
        Console.WriteLine($"Your total including the bonus: {total}");
    }
    
    if (total >= 16)
    {
        Console.WriteLine("You win a new car!");
    }
    else if (total >= 10)
    {
        Console.WriteLine("You win a new laptop!");
    }
    else if (total == 7)
    {
        Console.WriteLine("You win a trip for two!");
    }
    else
    {
        Console.WriteLine("You win a kitten!");
    }
    
    
  2. Pośmiń chwilę na przejrzenie zaktualizowanej if-elseif-else konstrukcji.

    Instrukcje if, else ifi else umożliwiają tworzenie wielu warunków wyłącznych jako wyrażeń logicznych. Innymi słowy, jeśli chcesz mieć tylko jeden wynik, ale masz kilka możliwych warunków i wyników, użyj jak najwięcej else if instrukcji. Jeśli żadna z instrukcji if i else if nie zostanie zastosowana, zostanie wykonany końcowy else blok kodu. Element else jest opcjonalny, ale musi być ostatni, jeśli zdecydujesz się go uwzględnić.

  3. Użyj techniki tymczasowego twardego kodowania zmiennych, roll aby przetestować każdy komunikat.

Podsumowanie

  • Kombinacja instrukcji if i else umożliwia przetestowanie jednego warunku, a następnie wykonanie jednego z dwóch wyników. Blok kodu dla if elementu zostanie uruchomiony, gdy wyrażenie logiczne to true, a blok kodu dla else elementu zostanie uruchomiony, gdy wyrażenie logiczne to false.
  • Instrukcje można zagnieżdżać, aby zawęzić if możliwy warunek. Należy jednak rozważyć użycie instrukcji if, else ifi else .
  • Użyj else if instrukcji , aby utworzyć wiele warunków wyłącznych.
  • Element else jest opcjonalny, ale zawsze musi być ostatni, gdy jest uwzględniony.