Комбинирование операций и функций

Логические операции — это выражения. Значит, логические операции можно комбинировать с другими выражениями.

Мы хотим проверить чётность числа, то есть кратность двум. В программировании используют такой подход: проверяют остаток от деления на 2:

  • если остаток 0, то число было чётным
  • если остаток не 0, то число было нечётным

Остаток от деления в арифметике — один из результатов операции деления с остатком. Образуется, если результат деления не может быть выражен целым числом, при этом остаток от деления должен быть по абсолютной величине меньше делителя. В случае, если числа делятся друг на друга без остатка, или нацело, то считают, что остаток равен нулю.

Оператор % вычисляет остаток от деления:

  • 7 % 21
  • 21 % 30
  • 19 % 54

С помощью него напишем функцию проверки чётности:

public static void main(String[] args) {
  isEven(10); // => true
  isEven(3);  // => false
}

static boolean isEven(int number) {
  return number % 2 == 0;
}

В одном выражении мы скомбинировали логический оператор == (проверка равенства) и арифметический оператор %.

Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение number % 2, затем результат участвует в логическом сравнении.

По-русски это можно расшифровать так: «вычислить остаток от деления числа number на 2 и сравнить с нулем; затем вернуть результат сравнения.


Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.

Алгоритм:

  1. Получим и запишем в переменную первый символ из строки-аргумента.
  2. Сравним, равен ли символ своей большой (заглавной) версии.
  3. Вернём результат.

Для работы с символами в Java используется примитивный тип данных char.

public static void main(String[] args) {
  isFirstLetterInUpperCase("marmont"); // => false
  isFirstLetterInUpperCase("Robb"); // => true
}

public static boolean isFirstLetterInUpperCase(String string) {
  char firstLetter = string.charAt(0);
  return Character.isUpperCase(firstLetter);
}

Мы использовали функцию Character.isUpperCase, она принимает cимвол и проверяет, находится ли этот символ в верхнем регистре. Мы передаём ей первый символ строки.

Попробуйте проговорить происходящее по-русски, аналогично тому, как мы расшифровывали процесс в примере с isEven в начале урока.



String firstName = "Alexander";

firstName.charAt(0); // => A

Задание

Сэм решил изучить историю Таргариенов со времени первых людей, но книг было много и информация могла находиться в любой из них. К счастью для Сэма, большинство книг были оцифрованы молодыми мейстерами. Он подумал, что неплохо бы написать функцию, которая анализирует тексты на наличие в них упоминания фамилии Таргариенов.

Реализуйте функцию hasTargaryenReference, которая принимает на вход строку и проверяет начинается ли она с Targaryen. Сделать это легко, используя функцию строки startsWith, которая принимает на вход один параметр:

  • Предполагаемое начало строки

hasTargaryenReference(""); // => false
hasTargaryenReference("Targari"); // => false
hasTargaryenReference("targaryen"); // => false
hasTargaryenReference("Targaryen"); // => true

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

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

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