Проверка кратности 15 должна предшествовать отдельным проверкам 3 и 5. Возвращайте байты строки в явной кодировке, а неподходящее число отклоняйте IllegalArgumentException.
FizzBuzz: создание массива байтов из заданного числа
Проверка кратности 15 должна предшествовать отдельным проверкам 3 и 5. Возвращайте байты строки в явной кодировке, а неподходящее число отклоняйте IllegalArgumentException.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать метод fizzbuzztzest, который принимает единственный целочисленный параметр num и возвращает массив байт. Формирование массива должно соответствовать следующим правилам:
- если число делится на 3 без остатка — записать строку
"Fizz"; - если делится на 5 без остатка — записать строку
"Buzz"; - если делится одновременно на 3 и на 5 — записать строку
"FizzBuzz"; - если число не кратно ни 3, ни 5 — выбросить
IllegalArgumentException. Напишите модульные тесты, покрывающие все варианты поведения.
public byte[] fizzbuzztzest(int num) {
throw new Error("Not implemented yet");
}
Ответ
Проверка кратности 15 должна предшествовать отдельным проверкам 3 и 5. Возвращайте байты строки в явной кодировке, а неподходящее число отклоняйте IllegalArgumentException.
public byte[] fizzbuzztzest(int num) {
String value;
if (num % 15 == 0) value = "FizzBuzz";
else if (num % 3 == 0) value = "Fizz";
else if (num % 5 == 0) value = "Buzz";
else throw new IllegalArgumentException("Unsupported number");
return value.getBytes(java.nio.charset.StandardCharsets.UTF_8);
}
JUnit-проверки внутри теста класса с этим методом:
assertArrayEquals("Fizz".getBytes(StandardCharsets.UTF_8), fizzbuzztzest(3));
assertArrayEquals("Buzz".getBytes(StandardCharsets.UTF_8), fizzbuzztzest(5));
assertArrayEquals("FizzBuzz".getBytes(StandardCharsets.UTF_8), fizzbuzztzest(15));
assertArrayEquals("FizzBuzz".getBytes(StandardCharsets.UTF_8), fizzbuzztzest(0));
assertArrayEquals("Buzz".getBytes(StandardCharsets.UTF_8), fizzbuzztzest(-5));
assertThrows(IllegalArgumentException.class, () -> fizzbuzztzest(2));
Ноль и отрицательные числа не запрещены условием, поэтому проверяются обычной делимостью.