Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
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
languagejava
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;
}

...