...
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 Named. Person-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.
Include Page | ||||
---|---|---|---|---|
|