Versions Compared

Key

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

...

Legg merke til at StringGrid-grensesnittet arver (extends) fra Iterable<T><String>-klassen hvilket betyr at det skal være mulig å iterere over klassen ved å spørre Iterator-objektet om neste streng i rutenettet.

...

 Lag en StringGridImpl-klasse som implementerer StringGrid-grensesnittet. Denne klassen må støtte alle metodene som er definert i grensesnittet i tillegg til metoden 

-- De får utdelt GridImpl<T> og skal selv definere Grid<T>-grensesnittet og endre GridImpl så den implementerer Grid<T> (dersom vi tror bruk av generics forvirrer dem, så låser vi det til String, men da må testen oppdateres)

 

 

Del 2 - StringGridIterator-klasse

 

Code Block
public Iterator<String> iterator()

som returnerer et Iterator<String>-objekt som skal kunne spørres om neste streng i rutenettet for iterasjon. Du står fritt til å velge hvordan metodene definert av grensesnittet skal implementeres. To mulige løsninger er en enkel ArrayList<String> eller en dobbel ArrayList<ArrayList<String>> der den ytre listen er radene og de indre kolonnene. Wikisiden om Todimensjonale matriser kan være lurt å ta en titt på før du går i gang. Dersom getElement(int, int)- eller setElement(int, int, String)-metodene kalles med ulovlige verdier for rad eller kolonne (i.e. de er utenfor brettet) skal en IllegalArgumentException kastes. 

Del 2 - StringGridIterator-klasse

Iterator-objektet som returneres av iterator()-metoden i StringGridImpl-klassen itererer over StringGridImpl-klassen på én bestemt måte. For å kunne velge om en vil iterere over brettet bortover først (rowMajor=true) eller nedover først (rowMajor=false) skal du nå lage en StringGridIterator-klasse som implementerer grensesnittet Iterator<String>. Den må støtte følgende metoder: 


-- GridIterator<T> implementerer en Iterator<T> over alle elementene. Klassen kan konfigureres slik at den kan itererer bortover først (rowMajor=true) eller nedover først (rowMajor=false).

...

 

 

 

 

Del 1

Definer et grensesnitt Named med metodene 

  • setGivenName(String) og String getGivenName() for å sette og hente fornavn,
  • setFamilyName(String) og String getFamilyName() for å sette og hente etternavn, og
  • setFullName(String) og String getFullName() for å hente personens hele navn.

Del 2

Lag en Person-klasse som implementerer grensesnittet NamedPerson-klassen kan ha enten ett eller to felter for personnavnet avhengig av hva man finner enklest. Man kan anta at brukeren oppretter Person-objekter med gyldige navn, altså trenger man ikke å implementere valideringsmetoder.

 

Del 3

For å kunne sammenligne Named-objekter, f. eks. for å sortere en kontaktliste, kan vi lage en klasse NamedComparator som implementerer grensesnittet Comparator. NamedComparator-objektet skal brukes for å sammenligne navn parvis: Først på etternavn, og deretter på fornavn om etternavnene er like. Dette kan gjøres ved å la NamedComparator-klassen implementere metoden int compare(Named named1, Named named2) med følgende logikk: 

  • Dersom etternavnene er ulike skal metoden
    • returnere et negativt heltall om det første etternavnet er leksikografisk ordnet før det andre,
    • eller et positivt heltall i motsatt tilfelle.
  • Dersom etternavnene er like skal metoden gjøre det samme på fornavnene. Dersom også fornavnene er like skal metoden returnere 0.
  • Hint: For å sammenlikne to String-objekter kan man bruke String-klassens innebygde Comparable-metode int compareTo(String streng2). Denne metoden sammenlikner leksikografisk en streng med en annen.

 


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

Include Page
Bunntekst for JExercise-oppgaver
Bunntekst for JExercise-oppgaver