FizzBuzz: создание массива байтов из заданного числа

Проверка кратности 15 должна предшествовать отдельным проверкам 3 и 5. Возвращайте байты строки в явной кодировке, а неподходящее число отклоняйте IllegalArgumentException.

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

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

Проверка кратности 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));

Ноль и отрицательные числа не запрещены условием, поэтому проверяются обычной делимостью.

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

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

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

Подробнее