Lesson 1.1: FizzBuzz
Learning goals:
- Implement a small, well-tested pure function.
- Explain the arrange-act-assert pattern.
1. Introduction
FizzBuzz is a classic beginner exercise. For each number from 1 to n:
- print
Fizzif it is divisible by 3 - print
Buzzif it is divisible by 5 - print
FizzBuzzif it is divisible by both - otherwise print the number itself
2. Implementation (Java)
public class FizzBuzzer {
public String fizzBuzz(int n) {
if (n % 15 == 0) return "FizzBuzz";
if (n % 3 == 0) return "Fizz";
if (n % 5 == 0) return "Buzz";
return String.valueOf(n);
}
}
Extra slides: FizzBuzz, step by step
3. Command-line application
public class Main {
public static void main(String[] args) {
int limit = args.length == 0 ? 100 : Integer.parseInt(args[0]);
FizzBuzzer fizzBuzzer = new FizzBuzzer();
for (int number = 1; number <= limit; number++) {
System.out.println(fizzBuzzer.fizzBuzz(number));
}
}
}
4. Unit test (JUnit)
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class FizzBuzzerTest {
private final FizzBuzzer fizzBuzzer = new FizzBuzzer();
@Test
void divisibleByThreeGivesFizz() {
assertEquals("Fizz", fizzBuzzer.fizzBuzz(9));
}
@Test
void divisibleByFiveGivesBuzz() {
assertEquals("Buzz", fizzBuzzer.fizzBuzz(10));
}
@Test
void divisibleByFifteenGivesFizzBuzz() {
assertEquals("FizzBuzz", fizzBuzzer.fizzBuzz(15));
}
@Test
void otherNumbersReturnThemselves() {
assertEquals("8", fizzBuzzer.fizzBuzz(8));
}
}
5. Class diagram
The example has a Main entry point that loops from 1 to a configurable limit and delegates each value to FizzBuzzer.fizzBuzz. The default limit is 100.