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; } }