Java: Конструкция else if
В самой полной версии конструкция if
содержит не только ветку else
, но и другие условные проверки с помощью else if
. Такой вариант используется при большом количестве проверок, которые взаимоисключают друг друга:
if (/* что-то */) {
} else if (/* другая проверка */) {
} else if (/* другая проверка */) {
} else {
}
Здесь стоит обратить внимание на два момента:
- Ветка
else
может отсутствовать - Количество
else if
условий может быть любым
Напишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:
App.getTypeOfSentence("Who?"); // "Sentence is question"
App.getTypeOfSentence("No"); // "Sentence is general"
App.getTypeOfSentence("No!"); // "Sentence is exclamation"
public static String getTypeOfSentence(String sentence)
{
var sentenceType = "";
if (sentence.endsWith("?")) {
sentenceType = "question";
} else if (sentence.endsWith("!")) {
sentenceType = "exclamation";
} else {
sentenceType = "general";
}
return "Sentence is " + sentenceType;
}
https://replit.com/@hexlet/java-basics-if-else
Теперь все условия выстроены в единую конструкцию. Оператор else if
— это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
- Если последний символ
?
, то "question" - Иначе, если последний символ
!
, то "exclamation" - Иначе "general"
В итоге выполнится только один из блоков кода, относящихся ко всей конструкции if
.
Задание
На электронной карте Вестероса, которую реализовал Сэм, союзники Старков отображены зеленым кружком, враги — красным, а нейтральные семьи — серым.
Напишите для Сэма метод whoIsThisHouseToStarks()
, который принимает на вход фамилию семьи и возвращает одно из трех значений: "friend"
, "enemy"
, "neutral"
.
Правила определения:
- Друзья (
"friend"
): "Karstark", "Tally" - Враги (
"enemy"
): "Lannister", "Frey" - Любые другие семьи считаются нейтральными
Примеры вызова:
App.whoIsThisHouseToStarks("Karstark"); // "friend"
App.whoIsThisHouseToStarks("Frey"); // "enemy"
App.whoIsThisHouseToStarks("Joar"); // "neutral"
App.whoIsThisHouseToStarks("Ivanov"); // "neutral"
Упражнение не проходит проверку — что делать? 😶
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.