Вправа – створення вкладеної логіки прийняття рішень за допомогою функції if, else if та else
У попередньому блоці ви використовували кілька if інструкцій для реалізації правил гри. Однак у кінці блоку ви помітили, що для виправлення тонкої помилки в коді потрібні більш виразні if інструкції.
У цій вправі ви використовуватимете if, elseінструкції else if , щоб покращити параметри розгалуження в коді та виправити помилку логіки.
Використовувати оператори if і else замість двох окремих операторів if
Замість двох перевірок для відображення повідомлення "Ви виграєте!" або "На жаль, ви втратите", ви використовуватимете else ключове слово.
Переконайтеся, що код Program.cs відповідає таким чином:
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."); }Це код, який ви завершили в попередній одиниці.
Щоб перевірити дві
ifінструкції в кінці файлу, знадобиться хвилина:if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Зверніть увагу, що обидві
ifінструкції порівнюютьсяtotalз однаковим числовим значенням. Це прекрасна можливість використовувати інструкціюelse.Оновіть дві
ifінструкції в такий спосіб:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Тут, якщо
total >= 15хибність, буде виконано блок коду після ключовогоelseслова. Оскільки два результати пов'язані протилежності, це ідеальний сценарій для ключовогоelseслова.Оновлений файл Program.cs має містити такий код:
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."); }
Змініть код, щоб вилучити бонус за накопичення для парних і потрійних розрядів за допомогою вкладення
У попередньому блоці ви побачили, що в програмі було введено тонку логічну помилку. Цю проблему можна вирішити, вкласвши свої if інструкції.
Вкладення дає змогу розміщувати блоки коду всередині блоків коду. У цьому випадку ви вкластимете в іншу if інструкцію elseif (тричі), щоб уникнути отримання обох бонусів.
Змініть код відповідно до наведеного нижче входження коду.
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."); }Знайдіть хвилинку, щоб переглянути вкладені
ifінструкції.Мета полягає в тому, щоб створити внутрішню
if-elseконструкцію, де два результати є пов'язаними протилежностями, а потім використовувати протилежні результати (якщо/істина та інше /false), щоб присудити бонусні бали за потрійні та подвійні бали. Щоб досягти цієї мети, перевірте наявність подвійних розрядів у зовнішньомуifположенні, а потім на потрійні значення у внутрішнійifінструкції. Цей шаблон гарантує, що, коли внутрішня перевірка на потрійні повертаєтьсяfalse, блокelseкоду може присвоїти бали за парний розряд.Далі ви отримаєте "жорсткий код" результатів трьох рулонів, щоб перевірити свою кодову логіку.
Створення пустого рядка коду над рядком, де
totalоголошено та ініціалізовано.Щоб перевірити кількість подвійних розрядів, введіть такий код:
roll1 = 6; roll2 = 6; roll3 = 5;Жорстке кодування трьох
rollзмінних дає змогу перевірити код, не запускаючи програму десятки разів.У меню Файл коду Visual Studio натисніть кнопку Зберегти.
У поданні EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші елемент TestProject, а потім виберіть відкрити в інтегрованому терміналі.
Панель терміналів має відкритися та містити командний рядок, який показує, що термінал відкрито в папці TestProject.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Коли код запускається, ви побачите:
Dice roll: 6 + 6 + 5 = 17 You rolled doubles! +2 bonus to total! You win!Щоб перевірити наявність тричі, оновіть жорстко закодовані змінні рулону, як це зробити:
roll1 = 6; roll2 = 6; roll3 = 6;У меню Файл коду Visual Studio натисніть кнопку Зберегти.
У поданні EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші елемент TestProject, а потім виберіть відкрити в інтегрованому терміналі.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Коли код запускається, ви побачите:
Dice roll: 6 + 6 + 6 = 18 You rolled triples! +6 bonus to total! You win!
Використовуйте, якщо, інакше, інструкції, щоб дати приз замість повідомлення win-lose
Щоб зробити гру веселішою, можна змінити гру з "win-or-lose" на присудження вигаданих призів за кожен рахунок. Ви можете запропонувати чотири призи. Однак гравець повинен виграти лише один приз:
- Якщо гравець забиває більше або дорівнює 16, він виграє новий автомобіль.
- Якщо гравець забиває більше або дорівнює 10, він виграє новий ноутбук.
- Якщо гравець забиває рівно 7, вони виграють поїздку.
- В іншому випадку гравець виграє кошеня.
Змініть код із попередніх кроків на такий код:
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!"); }Щоб переглянути оновлену
if-elseif-elseконструкцію, знадобиться хвилина.Інструкції
ifтаelse if,elseдають змогу створювати кілька ексклюзивних умов як логічні вирази. Іншими словами, якщо потрібно, щоб стався лише один результат, але у вас є кілька можливих умов і результатів, використовуйте будь-якуelse ifкількість тверджень. Якщо жоден ізifцих інструкційelse ifне застосовується, буде виконано остаточнийelseблок коду. Цеelseнеобов'язково, але воно має тривати, якщо ви вирішите включити його.Щоб перевірити кожне повідомлення, скористайтеся методом тимчасового жорсткого
rollкодування змінних.
Повторити введення
- Комбінація та оператори
ifдає змогуelseперевірити одну умову, а потім виконати один із двох результатів. Блок коду буде запущено,ifколи логічний вираз ,trueі блок коду буде запущено,elseколи логічний вираз .false - Можна вкласти
ifоператори, щоб звузити можливу умову. Однак натомість радимо використовувати операториif,else ifінструкціїelse. - Використовуйте
else ifоператори для створення кількох монопольних умов. - Необов'язковий
elseаргумент, але він завжди має бути останнім у включенні.