Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Forelæsning 3.1 Collections Javas for-each løkke

Lignende præsentationer


Præsentationer af emnet: "Forelæsning 3.1 Collections Javas for-each løkke"— Præsentationens transcript:

1 Forelæsning 3.1 Collections Javas for-each løkke
Afleveringsopgave 3.2: Generaliseret raflebæger dIntProg, E14

2 iTunes – et motiverende eksempel
Playlist Track dIntProg, E14

3 * ≈ én-til-mange relation
iTunes klassemodel Player void add(PlayList p) List<PlayList> find(String q) void print() * Playlist PlayList String getName() void addTrack(Track t) void print() Track shortestTrack() Track longestTrack() List<Track> search(String q) List<Track> longerThan(int r) void shuffle() * Track * ≈ én-til-mange relation Vilkårligt mange objekter af den pågældende type Track String getName() String getArtist() int getTime() dIntProg, E14

4 ? Andet eksempel * En adressebog hvor man kan: Problem
Tilføje kontakter (personer) – så mange som man vil Udskrive adressebogen Finde et telefonnummer, givet et navn Finde gennemsnitsalderen på kontakterne Problem Hvordan kan man huske på personerne? Hvordan realiseres én-til-mange relationen? AddressBook void addPerson(Person p) void print() String getPhone(String name) int averageAge() Person String getName() String getNumber() int getAge() ? * dIntProg, E14

5 Collections – Samlinger af objekter
Objektreferencer for at holde fast i et objekt skal der bruges en objektreference (en variabel) for at holde fast i objekter skal der bruges objektreferencer... Collections en særlig slags objekter, der kan opbevare (referencer til) objekter f.eks. ArrayList java.util en pakke, der bl.a. indeholder klasserne i Javas såkaldte collection framework dIntProg, E14

6 Eksempel: Liste af personer
public void testMethod() { Person person; ArrayList<Person> persons = new ArrayList<Person>(); // add some persons person = new Person( "Jeppe", " ", 33 ); persons.add(person); person = new Person( "Ole", " ", 28 ); person = new Person( "Linda", " ", 21 ); } dIntProg, E14

7 Objektmodel for personeksempel
persons: ArrayList<Person> size() = 3 name: number: age: 33 ”Jeppe” ” ” name: number: age: 28 ”Ole” ” ” name: number: age: 21 ”Linda” ” ” person: dIntProg, E14

8 Realisering af én-til-mange – UML
AddressBook Person String getName() String getNumber() int getAge() ArrayList<Person> persons void addPerson(Person p) void print() String getPhone(String name) int averageAge() * dIntProg, E14

9 Realisering af en-til-mange - Kode
For at realisere en en-til-mange relation i koden skal man gøre 3 ting: Importere klassen ArrayList import java.util.ArrayList; Erklære en feltvariablen af typen ArrayList<…> private ArrayList<Person> persons; Initialisere feltvariablen i konstruktøren public AddressBook(){ persons = new ArrayList<Person>(); } dIntProg, E14

10 Collection – parametriseret type
ArrayList<E> lister (sekvenser) af objekter af typen E public class ArrayList<E> { boolean add(E e){…} void add(int index, E element){…} E get(int index){…} boolean contains (Object o){…} boolean isEmpty(){…} Iterator<E> iterator(){…} boolean remove(Object o){…} int size(){…} ... } Implementer addPerson metoden Se på Javadoc Se JavaDoc... dIntProg, E14

11 Gennemløb med Javas for-each-løkke
public void testMethod() { Person person; ArrayList<Person> persons = new ArrayList<Person>(); // add some persons person = new Person( ”Jeppe”, ” ”, 33 ); persons.add(person); ... // for each person print for ( Person person : persons ) { System.out.println(person); } Implementer print-metoden dIntProg, E14

12 Find gennemsnitsalder
Specifikation (hvad) /** * return the average age of the people in the addressbook */ public int averageAge() { ??? } dIntProg, E14

13 Implementation (hvordan)
/** * return the average age of the people in the * address book */ public int averageAge() { return ageSum() / persons.size(); } /** * return the sum of the age of the people in the * address book */ private int ageSum() { ??? } dIntProg, E14

14 Implementation af ageSum
/** * return the sum of the age of the people in the * address book */ private int ageSum() { int result= 0; // accumulate the sum of ... in variable result return result; } dIntProg, E14

15 Implementation af ageSum
/** * return the sum of the age of the people in the * address book */ private int ageSum() { int result= 0; for (Person person : persons) { result += person.getAge(); } return result; dIntProg, E14

16 Opsummering ArrayLists (og andre collections) kan bruges til at realisere én-til-mange relationer Importere klassen ArrayList import java.util.ArrayList; Erklære en feltvariablen af typen ArrayList<…> private ArrayList<Person> persons; Initialisere feltvariablen i konstruktøren public AddressBook(){ persons = new ArrayList<Person>(); } Javas for-each-løkke kan bruges til at gennemløbe ArrayLists og andre collections for (Person person : persons) {...} dIntProg, E14

17 Aflevering 3.2: Generaliseret raflebæger (DieCup2)
I indeværende uge laver i et BlueJ projekt med et raflebæger og to terninger Terning Raflebæger dIntProg, E14

18 Aflevering 3.2: Generaliseret raflebæger (fortsat)
I den kommende uge: Lav en TestDriver klasse med en metode, som kan: Skabe et raflebæger med to terninger. Lave et kast med terningerne. Udskrive det samlede antal øjne i kastet. Generaliser raflebæger så der kan være et vilkårligt antal terninger Brug ArrayList<Die>. Skriv ny testmetode. Generaliser terning så der kan være et vilkårligt antal øjne dIntProg, E14


Download ppt "Forelæsning 3.1 Collections Javas for-each løkke"

Lignende præsentationer


Annoncer fra Google