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;
}Теперь все условия выстроены в единую конструкцию. Оператор 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"Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
class Test {
public static void main(String[] args) {
assertThat(App.whoIsThisHouseToStarks("Tally")).isEqualTo("friend");
assertThat(App.whoIsThisHouseToStarks("Karstark")).isEqualTo("friend");
assertThat(App.whoIsThisHouseToStarks("Lannister")).isEqualTo("enemy");
assertThat(App.whoIsThisHouseToStarks("Martell")).isEqualTo("neutral");
assertThat(App.whoIsThisHouseToStarks("undefined")).isEqualTo("neutral");
}
}Решение учителя откроется через:
20:00
