class Hund implements Comparable { String navn; Kull mittKull; Tidspunkt minFodselstid; Hund neste = null; Hund (Kull k, String n, Tidspunkt fodt) { navn = n; mittKull = k; minFodselstid = fodt; } // Kullklassen har referasne til hundens foreldre, s? dette kan jeg hente derfra. public Hund mor () { // Jeg antar at alle hunder er del av et kull. return mittKull.mor; } public Hund far () { return mittKull.far; } @Override // Siden jeg vet at jeg ?nsker ? sjekke om f?dselstidene er forskjellige, kan jeg utnytte compareTo-metoden jeg skrev i // Tidspunkt-klassen. public int compareTo (Hund h) { // compareTo returnerer minFodselstid - h.minFodselstid (dette er litt forenkla) return minFodselstid.compareTo(h.minFodselstid); } // Jeg har skrevet ut metoden litt fra seminaret for ? gj?re det litt lettere ? forst?. // morLik og farLik i halvs?sken er slik det var p? seminaret. public boolean erHelsosken (Hund h) { // To hunder er hels?sken dersom de er i samme kull. if (mittKull == h.mittKull) { return true; } // Hvis jeg ikke vet mor eller far, kan jeg ikke med sikkerhet sid at to hunder er hels?sken. if (mor() == null || far() == null) { return false; } boolean morLik = (this.mor() == h.mor()); boolean farLik = (this.far() == h.far()); return morLik && farLik; } public boolean erHalvsosken (Hund h) { boolean morLik = (this.mor() == h.mor()) && mor()!= null; boolean farLik = (this.far() == h.far()) && (far() != null || mittKull == h.mittKull); boolean halv = (morLik != farLik); // Den orginale koden brukte XOR-opperatoren ^ for ? l?se dette. // Det er ikke n?dvendig ? bruke XOR eksplisitt for ? l?se denne oppgaven. return halv; } public Hund finnEldsteKjenteOpphav () { // Dersom begge foreldre er ukjent er hunden selv sitt eldste kjente opphav. if (mor() == null && far() == null) { return this; } // Her vet jeg minst en forelder er kjent, metoden ikke gikk inn i if-sjekken. Hund mor = mor(); Hund far = far(); // Hvis mor eller far er null er det eldste kjente oppahvet opphavet til henholdsvis far eller mor. if (far == null) { return mor.finnEldsteKjenteOpphav(); } else if (mor == null){ return far.finnEldsteKjenteOpphav(); } // N? vet jeg at b?de mor og far eksisterer, s? jeg m? sammenlikne opphavet deres for ? finne den eldste av dem. Hund eldsteFarSide = far.finnEldsteKjenteOpphav(); Hund eldsteMorSide = mor.finnEldsteKjenteOpphav(); // CompareTo returnerer her f?rdselsdato til far - f?dselsdato til mor. H?yere f?dselsdato betyr at man er yngre. (?r 2000 kommer f?r ?r 2001) if (eldsteFarSide.compareTo(eldsteMorSide) < 0){ return eldsteFarSide; } // Returnerer ellers morside. (Likt f?dsselstidspunkt returnerer og morside) return eldsteMorSide; } }