else if

Функция getTypeOfSentence из предыдущего урока различает только вопросительные и обычные предложения. Давайте попробуем добавить поддержку восклицательных предложений:

public static void main(String[] args) {
  getTypeOfSentence("Who?"); // => 'Sentence is question'
  getTypeOfSentence("No'");   // => 'Sentence is normal'
  getTypeOfSentence("No!");  // => 'Sentence is exclamation'
}

public static String getTypeOfSentence(String sentence) {
  var lastChar = sentence.charAt(sentence.length() - 1);
  var sentenceType = "";
  if (lastChar == '?') {
    sentenceType = "question";
  }

  if (lastChar == '!') {
    sentenceType = "exclamation";
  } else {
    sentenceType = "normal";
  }

  return "Sentence is " + sentenceType;
}

Мы добавили еще одну проверку (“exclamation” переводится «восклицание»). Технически функция работает, но с точки зрения семантики есть проблемы.

  • Проверка на наличие восклицательного знака происходит в любом случае, даже если уже был обнаружен вопросительный знак.
  • Ветка else описана именно для второго условия, но не для первого.

Правильнее будет воспользоваться ещё одной возможностью условной конструкции:

public static void main(String[] args) {
  getTypeOfSentence("Who?"); // => 'Sentence is question'
  getTypeOfSentence("No");   // => 'Sentence is normal'
  getTypeOfSentence("No!");  // => 'Sentence is exclamation'
}

static String getTypeOfSentence(String sentence)
{
  var lastChar = sentence.charAt(sentence.length() - 1);
  var sentenceType = "";

  if (lastChar == '?') {
    sentenceType = "question";
  } else if (lastChar == '!') {
    sentenceType = "exclamation";
  } else {
    sentenceType = "normal";
  }

  return "Sentence is " + sentenceType;
}

Теперь все условия выстроены в единую конструкцию. else if — это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:

  • если последний символ ?, то "question"
  • иначе, если последний символ !, то "exclamation"
  • иначе "normal"

Выполнится только один из блоков кода, относящихся ко всей конструкции if.

Задание

На электронной карте Вестероса, которую реализовал Сэм, союзники Старков отображены зеленым кружком, враги — красным, а нейтральные семьи — серым.

Напишите для Сэма функцию whoIsThisHouseToStarks, которая принимает на вход фамилию семьи и возвращает одно из трех значений: "friend", "enemy", "neutral".

Правила определения:

  • Друзья ("friend"): “Karstark”, “Tally”
  • Враги (`”enemy’”): “Lannister”, “Frey” * Любые другие семьи считаются нейтральными Примеры вызова: java whoIsThisHouseToStarks("Karstark"); // => 'friend' whoIsThisHouseToStarks("Frey"); // => 'enemy' whoIsThisHouseToStarks("Joar"); // => 'neutral' whoIsThisHouseToStarks("Ivanov"); // => 'neutral'

Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.