Java: Комбинирование операций и функций
Логические операции — это выражения. Значит, логические операции можно комбинировать с другими выражениями.
Мы хотим проверить чётность числа, то есть кратность двум. В программировании используют такой подход: проверяют остаток от деления на 2:
- если остаток 0, то число было чётным
- если остаток не 0, то число было нечётным
Остаток от деления в арифметике — один из результатов операции деления с остатком. Образуется, если результат деления не может быть выражен целым числом, при этом остаток от деления должен быть по абсолютной величине меньше делителя. В случае, если числа делятся друг на друга без остатка, или нацело, то считают, что остаток равен нулю.
Оператор %
вычисляет остаток от деления:
7 % 2
→1
21 % 3
→0
19 % 5
→4
С помощью него напишем функцию проверки чётности:
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 и сравнить с нулем; затем вернуть результат сравнения.
Другой пример: напишем функцию, которая принимает строку и проверяет, заглавная ли первая буква.
Алгоритм:
- Получим и запишем в переменную первый символ из строки-аргумента.
- Сравним, равен ли символ своей большой (заглавной) версии.
- Вернём результат.
Для работы с символами в 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
Советы
Подробнее изучить функцию
startsWith()
можно на странице java.lang.String
Пожалуйста, авторизуйтесь, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт.