Сформируйте Fizz и Buzz по делимости на 3 и 5, объедините их и бросьте IllegalArgumentException, если строка пуста. Для массива байтов задайте UTF-8 явно.
FizzBuzz с генерацией исключения
Сформируйте Fizz и Buzz по делимости на 3 и 5, объедините их и бросьте IllegalArgumentException, если строка пуста. Для массива байтов задайте UTF-8 явно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция получает целое значение и возвращает массив байтов, сформированный по следующим принципам:
- Если входное число делится на 3 без остатка, в массив добавляется строка "Fizz".
- Если число делится на 5 без остатка, в массив добавляется строка "Buzz".
- Если число одновременно делится и на 3, и на 5, в массив помещается строка "FizzBuzz".
- Если число не кратно ни 3, ни 5, необходимо выбросить IllegalArgumentException.
- Реализация должна сопровождаться набором тестов.
Ответ
Сформируйте Fizz и Buzz по делимости на 3 и 5, объедините их и бросьте IllegalArgumentException, если строка пуста. Для массива байтов задайте UTF-8 явно.
static byte[] fizzBuzz(int number) {
String result = (number % 3 == 0 ? "Fizz" : "")
+ (number % 5 == 0 ? "Buzz" : "");
if (result.isEmpty()) throw new IllegalArgumentException();
return result.getBytes(java.nio.charset.StandardCharsets.UTF_8);
}
Пример проверок JUnit 5:
assertArrayEquals("Fizz".getBytes(StandardCharsets.UTF_8), fizzBuzz(6));
assertArrayEquals("Buzz".getBytes(StandardCharsets.UTF_8), fizzBuzz(10));
assertArrayEquals("FizzBuzz".getBytes(StandardCharsets.UTF_8), fizzBuzz(30));
assertArrayEquals("FizzBuzz".getBytes(StandardCharsets.UTF_8), fizzBuzz(0));
assertArrayEquals("Fizz".getBytes(StandardCharsets.UTF_8), fizzBuzz(-3));
assertThrows(IllegalArgumentException.class, () -> fizzBuzz(7));
Условие не ограничивает вход положительными числами, поэтому ноль также кратен 3 и 5.