FizzBuzz с генерацией исключения

Сформируйте Fizz и Buzz по делимости на 3 и 5, объедините их и бросьте IllegalArgumentException, если строка пуста. Для массива байтов задайте UTF-8 явно.

Короткий ответ

Что ответить на собеседовании

Сформируйте Fizz и Buzz по делимости на 3 и 5, объедините их и бросьте IllegalArgumentException, если строка пуста. Для массива байтов задайте UTF-8 явно.

Подробный разбор

Ответ с пояснениями

Условие

Функция получает целое значение и возвращает массив байтов, сформированный по следующим принципам:

  1. Если входное число делится на 3 без остатка, в массив добавляется строка "Fizz".
  2. Если число делится на 5 без остатка, в массив добавляется строка "Buzz".
  3. Если число одновременно делится и на 3, и на 5, в массив помещается строка "FizzBuzz".
  4. Если число не кратно ни 3, ни 5, необходимо выбросить IllegalArgumentException.
  5. Реализация должна сопровождаться набором тестов.

Ответ

Сформируйте 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее