← Назад к вопросам
FizzBuzz
1.0 Junior🔥 231 комментариев
#Коллекции#ООП#Основы Java
Условие
Напишите программу, которая выводит числа от 1 до 100 со следующими правилами:
- Если число кратно 3, вместо него выводится "Fizz"
- Если число кратно 5, вместо него выводится "Buzz"
- Если число кратно и 3, и 5, вместо него выводится "FizzBuzz"
- В остальных случаях выводится само число
Пример вывода
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
...
Требования
- Решите задачу без использования деления (опционально)
- Код должен быть чистым и читаемым
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Подход
Итерируем от 1 до 100. Для каждого числа проверяем делимость: сначала на 15 (FizzBuzz), затем на 3 (Fizz), затем на 5 (Buzz), иначе выводим само число. Порядок проверки важен.
Решение
public class FizzBuzz {
/**
* Метод 1: Базовый подход с условиями
*/
public static void fizzBuzz() {
for (int i = 1; i <= 100; i++) {
if (i % 15 == 0) {
System.out.println("FizzBuzz");
} else if (i % 3 == 0) {
System.out.println("Fizz");
} else if (i % 5 == 0) {
System.out.println("Buzz");
} else {
System.out.println(i);
}
}
}
/**
* Метод 2: С использованием StringBuilder для конструирования строки
*/
public static void fizzBuzzStringBuilder() {
for (int i = 1; i <= 100; i++) {
StringBuilder result = new StringBuilder();
if (i % 3 == 0) {
result.append("Fizz");
}
if (i % 5 == 0) {
result.append("Buzz");
}
if (result.length() == 0) {
result.append(i);
}
System.out.println(result.toString());
}
}
/**
* Метод 3: Функциональный подход с использованием Stream API
*/
public static void fizzBuzzStream() {
java.util.stream.IntStream.rangeClosed(1, 100)
.forEach(i -> System.out.println(getFizzBuzz(i)));
}
/**
* Вспомогательный метод для получения FizzBuzz значения
*/
public static String getFizzBuzz(int n) {
if (n % 15 == 0) {
return "FizzBuzz";
} else if (n % 3 == 0) {
return "Fizz";
} else if (n % 5 == 0) {
return "Buzz";
} else {
return String.valueOf(n);
}
}
/**
* Метод 4: С использованием списка кортежей (правил)
* Демонстрирует более гибкий подход
*/
public static void fizzBuzzWithRules() {
java.util.List<java.util.AbstractMap.SimpleEntry<Integer, String>> rules =
java.util.Arrays.asList(
new java.util.AbstractMap.SimpleEntry<>(15, "FizzBuzz"),
new java.util.AbstractMap.SimpleEntry<>(3, "Fizz"),
new java.util.AbstractMap.SimpleEntry<>(5, "Buzz")
);
for (int i = 1; i <= 100; i++) {
String output = String.valueOf(i);
for (var rule : rules) {
if (i % rule.getKey() == 0) {
output = rule.getValue();
break;
}
}
System.out.println(output);
}
}
/**
* Демонстрация и тестирование
*/
public static void demonstrateFizzBuzz() {
System.out.println("=== FizzBuzz (первые 20 значений) ===");
for (int i = 1; i <= 20; i++) {
System.out.println(i + ": " + getFizzBuzz(i));
}
}
public static void main(String[] args) {
System.out.println("=== Метод 1: Базовые условия ===");
fizzBuzz();
System.out.println("\n=== Демонстрация ===");
demonstrateFizzBuzz();
}
}
Сложность
- Временная сложность: O(n), где n = 100 (константа, но в общем случае линейна от верхней границы)
- Пространственная сложность: O(1), используются только переменные, независимо от размера
Примеры вывода
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
...
Тест-кейсы
- i=1: Вывод "1" (не кратно ни 3, ни 5)
- i=3: Вывод "Fizz" (кратно 3)
- i=5: Вывод "Buzz" (кратно 5)
- i=15: Вывод "FizzBuzz" (кратно и 3, и 5)
- i=30: Вывод "FizzBuzz" (кратно 15)
- i=99: Вывод "Fizz" (кратно 3)
- i=100: Вывод "Buzz" (кратно 5)
Edge cases и типичные ошибки
- Порядок проверки: КРИТИЧНО! Сначала проверяем на 15, иначе получим "FizzBuzz" как "Fizz" + "Buzz"
- Условия ввещены в if-else: Первый подходящий случай должен быть выполнен
- StringBuilder метод более элегантен при масштабировании (легче добавлять новые правила)
- Важно использовать i % 15 == 0 перед отдельными проверками i % 3 == 0 и i % 5 == 0
- Эта задача часто задаётся чтобы оценить качество кода, умение писать чистый и расширяемый код
Базовый метод с if-else лучше для интервью, он прост и понятен. StringBuilder метод показывает более гибкое мышление.