Skip to main content

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 Fizz if it is divisible by 3
  • print Buzz if it is divisible by 5
  • print FizzBuzz if 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.

5. Class diagram

PlantUML source for "5. Class diagram"
@startuml
class FizzBuzzer {
+fizzBuzz(n: int): String
}

class Main {
+main(args: String[]): void
}

Main ..> FizzBuzzer : uses
@enduml

Class diagram with 2 class(es) and 1 relation(s).

Classes:

  • Class FizzBuzzer with:
    • public method 'fizzBuzz', with parameter(s) 'n' of type int, return type String
    • no attributes
  • Class Main with:
    • public method 'main', with parameter(s) 'args' of type String[], return type void
    • no attributes

Relations:

  • Main has a dependency to FizzBuzzer