public class Clock { private static final int MINUTES_IN_AN_HOUR = 60; private static final int HOURS_IN_A_DAY = 24; private int hours; private int minutes; public Clock(int hours, int minutes) { this.hours = hours; this.minutes = minutes; sanitiseTime(); } public void add(int minutes) { this.minutes += minutes; sanitiseTime(); } private void sanitiseTime() { while (minutes < 0) { minutes += MINUTES_IN_AN_HOUR; hours--; } while (hours < 0) { hours += HOURS_IN_A_DAY; } int minutesOverflow = minutes / MINUTES_IN_AN_HOUR; minutes = minutes % MINUTES_IN_AN_HOUR; hours = (hours + minutesOverflow) % HOURS_IN_A_DAY; } @Override public String toString() { return toTimeString(hours) + ":" + toTimeString(minutes); } private String toTimeString(int number) { if (number < 10) return "0" + number; return String.valueOf(number); } @Override public boolean equals(Object obj) { if (!(obj instanceof Clock)) return false; Clock clock = (Clock) obj; return hours == clock.hours && minutes == clock.minutes; } }