...
Code Block | ||
---|---|---|
| ||
public class TimeInterval { int startHour; // timen intervallet starter, med 0 som første time etter midnatt int startMin; // minuttet innen start-timen som intervallet starter på int endHour; // timen intervallet slutter int endMin; // minuttet innen slutt-timen, som intervallet slutter på @Override public String toString() { return String.format("%02d:%02d-%02d:%02d", startHour, startMin, endHour, endMin); } } |
Vi har her lagt til en toString()-metode, for å gjøre det enklere å teste koden med System.out.println(...). String.format-metoden gjør det enkelt å bygge opp en String med strukturert innhold. Merk spesielt hvordan formatteringsdirektivet %02d angi tre ting på en gang: d-en betyr at vi formatterer et tall, 2-tallet at det skal settes av plass til to siffer og 0-tallet at det skal fylles på med 0-er (og ikke mellomrom) dersom tallet er på kun ett siffer.
En liten detalj må forøvrig avklares: Er slutt-tidspunktet med i intervallet eller ikke? Hvis vi f.eks. setter endHour til 16 og endMin til 0, betyr det at forelesningen er ferdig til kl. 16:00 eller at vi bruker det første minuttet av 16-timen? Vi velger den første tolkningen, så slutt-tidspunktet er først minutt som ikke er med i intervallet. Dette betyr noe for hva som er gyldig tilstand, som vi skal se.
...
Code Block | ||
---|---|---|
| ||
private void checkHour(int hour) { if (hour < 0 || hour >= 24) { throw new IllegalArgumentException("An hour must be >= 0 and < 24, but was " + hour); } } private void checkMin(int min) { if (min < 0 || min >= 60) { throw new IllegalArgumentException("A minute must be >= 0 and < 60, but was " + hourmin); } } private void checkStartLessThanOrEqualToEnd(int startHour, int startMin, int endHour, int endMin) { if (endHour < startHour || (endHour == startHour && endMin < startMin)) { throw new IllegalArgumentException("End cannot be less than start"); } } public void setStartHour(int startHour) { checkHour(startHour); checkStartLessThanOrEqualToEnd(startHour, this.startMin, this.endHour, this.endMin); this.startHour = startHour; } public void setStartMin(int startMin) { checkMin(startMin); checkStartLessThanOrEqualToEnd(this.startHour, startMin, this.endHour, this.endMin); this.startMin = startMin; } public void setEndHour(int endHour) { checkHour(endHour); checkStartLessThanOrEqualToEnd(this.startHour, this.startMin, endHour, this.endMin); this.endHour = endHour; } public void setEndMin(int endMin) { checkMin(endMin); checkStartLessThanOrEqualToEnd(this.startHour, this.startMin, this.endHour, endMin); this.endMin = endMin; } |
...