Задача-загадка (на цикл и оператор switch в Java)
Данная статья:
- написана командой Vertex Academy.
- это одна из статей из нашего "Самоучителя по Java"
Если Вы шли последовательно по нашему Самоучителю, то наверняка уже решали простейшие задачи на циклы. В этих задачах Вы могли неоднократно встречать оператор if. Теперь, давайте попрактикуемся использовать циклы в сочетании с оператором switch.
Решаем загадку
Представим, что у нас есть загадка: "Что это такое: синий, большой, с усами и полностью набит зайцами?" Ответ: троллейбус. Можно возражать, конечно, какого цвета сейчас троллейбусы - но мы не об этом.
Представим, что Вы загадываете эту загадку пользователю. Создайте программу, которая будет считывать с консоли ответ:
- у пользователя есть 3 попытки. После трех ответов программа должна завершиться;
- если пользователь вводит "Троллейбус", мы выводим в консоль "Правильно!" и выходим из цикла;
- если пользователь вводит "Сдаюсь", мы выводим в консоль "Правильный ответ: троллейбус." и выходим из цикла;
- если пользователь вводит любой другой ответ, мы выводим в консоль "Подумай еще." и продолжаем цикл.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; boolean exit; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); exit = false; for(int i = 1; i <= 3; i++){ if (exit == true) break; answer = inputAnswer.next (); switch (answer){ case ("Троллейбус"): System.out.println ("Правильно!"); exit = true; break; case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); exit = true; break; default: System.out.println("Подумай еще."); } } } } |
Вот как выглядит решение. Давайте разберем его по шагам.
Шаг 1. Выводим условие.
1 2 3 4 5 |
class Test { public static void main (String [] args) { System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); } } |
Шаг 2. Подключаем сканер.
Не будем останавливаться тут - как, зачем и почему подключается сканер можно посмотреть тут:
или в начальных задачах на циклы.
В итоге, имеем следующее:
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); answer = inputAnswer.next (); } } |
Как видим, мы создали Scanner под названием inputAnswer (переводится как "ввод ответа"). Кроме того, мы создали переменную String answer, в которой будем хранить результат работы Scanner-а
1 |
String answer; |
Еще мы считываем с консоли один раз:
1 |
answer = inputAnswer.next (); |
Но это не то, что нам нужно. Считывать нужно не один раз, а три - потому что у нас три попытки. Поэтому, давайте перейдем к следующему шагу.
Шаг 3. Добавляем цикл.
Итак, нужно считывать три раза. Давайте добавим цикл for:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); for(int i = 1; i <= 3; i++){ answer = inputAnswer.next (); } } } |
Как видите, цикл идет от 1 до 3 включительно - то-есть делает три шага. Теперь Scanner считывает ответ трижды.
Но сейчас, даже если мы напишем "Троллейбус", программа не остановится:
Что бы мы не ввели, разницы нет:
Теперь давайте добавим оператор switch.
Шаг 3. Добавляем оператор switch.
Вспомним условие:
- если пользователь вводит "Троллейбус", мы выводим в консоль "Правильно!";
- если пользователь вводит "Сдаюсь", мы выводим в консоль "Правильный ответ: троллейбус.";
- если пользователь вводит любой другой ответ, мы выводим в консоль "Подумай еще."
Создадим соответствующий switch:
1 2 3 4 5 6 7 8 9 |
switch (answer){ case ("Троллейбус"): System.out.println ("Правильно!"); break; case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); break; default: System.out.println("Подумай еще."); |
Если Вы плохо помните, как работает оператор switch, можете вернуться к этой статье:
Итак, теперь если написать в консоли :"Троллейбус" - программа зайдет в первое условие, и напишет "Правильно!", если "Сдаюсь" - "Правильный ответ: троллейбус.", а если что-то другое - "Подумай еще." Если добавить это в наш код, получим следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); for(int i = 1; i <= 3; i++){ answer = inputAnswer.next (); switch (answer){ case ("Троллейбус"): System.out.println ("Правильно!"); break; case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); break; default: System.out.println("Подумай еще."); } } } } |
Давайте протестируем:
Как видите, все так как мы хотели. Теперь, остался еще один шаг.
Шаг 4. Добавляем выход из цикла.
Теперь, мы должны выходить из цикла, если пользователь сдается или отвечает правильно. Как это сделать?
Для этого используем переменную типа boolean и оператор break. Если оператор break вам не знаком, или Вы что-то забыли - пересмотрите нашу статью, посвященную этому оператору.
Итак, объявляем переменную exit, которая будет иметь тип "boolean". Как можно догадаться, она будет true если нам нужно выйти из цикла, и false если выходить не нужно.
Поэтому, объявляем переменную, и задаем ей значение по умолчанию - false:
1 2 3 |
boolean exit; exit = false; |
Кроме того, в цикл нужно добавить условие выхода:
1 2 |
if (exit == true) break; |
Если добавить оба отрывка кода в цикл - видим следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; boolean exit; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); exit = false; for(int i = 1; i <= 3; i++){ if (exit == true) break; answer = inputAnswer.next (); switch (answer){ case ("Троллейбус"): System.out.println ("Правильно!"); break; case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); break; default: System.out.println("Подумай еще."); } } } } |
Подождите. Так условие всегда будет false - оно же нигде не меняется! Что делать - давайте подумаем.
Переменная exit должна стать true, если ответ правильный (case ("Троллейбус")), или если пользователь сдается (case ("Сдаюсь")). Поэтому, мы должны поменять значение exit в этих двух случаях. Поэтому, допишем:
1 2 3 4 |
case ("Троллейбус"): System.out.println ("Правильно!"); exit = true; break; |
Видите новую строку в середине? Мы изменяем значение exit на true в середине кейса.
Сделаем то же самое для второго:
1 2 3 4 |
case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); exit = true; break; |
Кстати, так можно дописывать любые условия - в любом количестве 🙂
В итоге получим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.Scanner; // подключаем сканер class Test { public static void main (String [] args) { String answer; boolean exit; System.out.println ("Что это такое: синий, большой, с усами и полностью набит зайцами?"); Scanner inputAnswer = new Scanner (System.in); exit = false; for(int i = 1; i <= 3; i++){ if (exit == true) break; answer = inputAnswer.next (); switch (answer){ case ("Троллейбус"): System.out.println ("Правильно!"); exit = true; break; case ("Сдаюсь"): System.out.println ("Правильный ответ: троллейбус."); exit = true; break; default: System.out.println("Подумай еще."); } } } } |
Вот пример наших результатов:
Отлично, все работает!
Понравилась наша статья? Есть возможность обучаться у нас на курсах. Детальнее на нашем сайте.