Versions Compared

Key

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

...

Excerpt

Denne oppgaven hander om et grensnitt (interface) for brett (gridrutenett som holder strenger (StringGrid), hvordan slike implementeres og hvordan en kan iterere gjennom et slikt brett rutenett ved hjelp av en Iterator.

I denne oppgaven tar vi utgangspunkt i en et StringGrid-grensesnitt som definerer metodene til et rutenett som holder strenger. Et rutenett som holder strenger 

 

Code Block
package interfaces;

public interface StringGrid extends Iterable<String> {

	public int getRowCount();
	public int getColumnCount();

	public String getElement(int row, int column);
	public void setElement(int row, int column, String element);
}

 

Person-klasse som har et navn (String) bestående av fornavn ("given name") og etternavn ("family name").  

 

- Grid - generelt grensesnitt (og implementasjon) for rutenett og iterator over elementene

 

Del 1 - StringGrid-grensesnitt og implementerende StringGridImpl-klasse

 

-- 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 - StringGridImpl-klasse

 

-- 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.

 

 

Merk: Underveis i denne oppgaven skal det skrives testkode for å sortere navn i en liste vha. Collections.sort-metoden, for å teste om NamedComparator-klassen har implementert Comparator riktig.

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

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