Ćwiczenie — tworzenie zagnieżdżonej logiki decyzyjnej za pomocą polecenia if, else if i else
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 if
instrukcji , else
i 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
.
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.
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ównywanetotal
z tą samą wartością liczbową. Jest to idealna okazja, aby użyć instrukcjielse
.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łowieelse
kluczowym zostanie wykonany. Ponieważ dwa wyniki są powiązane przeciwieństwami, jest to idealny scenariusz dla słowa kluczowegoelse
.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.
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."); }
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ętrznejif
, a następnie w przypadku potrójnych w instrukcji wewnętrznejif
. Ten wzorzec gwarantuje, że gdy wewnętrzna kontrola dla potrójnych zwracafalse
wartość ,else
blok kodu może przyznać punkty za podwójne.Wymyślisz "hard code" wyniki trzech rzutów, aby przetestować logikę kodu.
Utwórz pusty wiersz kodu powyżej wiersza, w którym
total
jest zadeklarowany i zainicjowany.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.W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.
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.
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!
Aby przetestować rolkę potrójnych, zaktualizuj zakodowane zmienne rzutu w następujący sposób:
roll1 = 6; roll2 = 6; roll3 = 6;
W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.
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.
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.
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!"); }
Pośmiń chwilę na przejrzenie zaktualizowanej
if-elseif-else
konstrukcji.Instrukcje
if
,else if
ielse
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ęcejelse if
instrukcji. Jeśli żadna z instrukcjiif
ielse if
nie zostanie zastosowana, zostanie wykonany końcowyelse
blok kodu. Elementelse
jest opcjonalny, ale musi być ostatni, jeśli zdecydujesz się go uwzględnić.Użyj techniki tymczasowego twardego kodowania zmiennych,
roll
aby przetestować każdy komunikat.
Podsumowanie
- Kombinacja instrukcji
if
ielse
umożliwia przetestowanie jednego warunku, a następnie wykonanie jednego z dwóch wyników. Blok kodu dlaif
elementu zostanie uruchomiony, gdy wyrażenie logiczne totrue
, a blok kodu dlaelse
elementu zostanie uruchomiony, gdy wyrażenie logiczne tofalse
. - Instrukcje można zagnieżdżać, aby zawęzić
if
możliwy warunek. Należy jednak rozważyć użycie instrukcjiif
,else if
ielse
. - 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.