Versions Compared

Key

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

...

I både del 1 og 2 skal dere skrive testkode som sorterer kort i en liste vha. Collections.sort-metoden og henholdvis Comparable- og Comparator-logikken, så dere ser at det virker som forventet.

Del 1

La Card-klassen implementere Comparable med følgende sammenligningslogikk

  • compareTo-metoden skal sammenligne et kort med et annet, slik at spar vurderes som høyere enn hjerter, hjerter høyere enn ruter og ruter høyere enn kløver. Ved lik kortfarge skal verdien brukes, altså 1 (ess) er mindre enn 2 er mindre enn 3 osv. til og med 11 (knekt), 12 (dame) og 13 (konge).

Del 2

For å kunne sortere Card-objekter med annen logikk, så kan bruke grensesnittet Comparator, som er et objekt som kan sammenligne objekter parvise, typisk de som skal sorteres. Implementer en Comparator (dvs. lag en klasse som implement Comparator) kalt CardComparator, som kan konfigureres (stilles inn) til å sortere med ess som høyeste kort og med en bestemt kortfarge som trumf, altså en kortfarge som regnes som høyere enn de andre

  • CardComparator må ha en konstruktør som tar inn en boolean og en char. boolean-argumentet sier om ess skal regnes som størst (true) eller minst (false) og char-argumentet angir hvilke kortfarge som er trumf. F.eks. skal et CardComparator-objekt laget med new CardComparator(true, ' ') rangere ess høyere enn konge og bruke standard rangering av kortfarger (siden trumf-argumentet ikke er en av kortfargene), og et CardComparator-objekt laget med new CardComparator(false, 'C') rangere ess lavest og kløver ('C' = clubs) høyest av kortfargene (de andre kortfargene har standard rangering med spar over hjerter over ruter).

Ekstraoppgave

Utvid CardComparator slik at den kan konfigureres med en annen rangering av kortfargene, f.eks. slik at kløver er høyere enn ruter. Merk at denne fortsatt skal overstyres av evt. trumf. Nytten er altså at en kan endre rangeringsrekkefølgen på alle på én gang.

 

JExercise-testkode for del 1 og del 2 finner du her: interfaces/CardComparatorTest.java. Originalkoden (jextest) for testen finner du her: interfaces/CardComparator.jextest

...