Forelæsning Uge 3 Mandag

Størrelse: px
Starte visningen fra side:

Download "Forelæsning Uge 3 Mandag"

Transkript

1 Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList Javas for-each løkke Alternativ til den almindelige for løkke Velgenet til gennemløb af arraylister (og andre collections) På Projekt Euler og CodingBats findes en masse ekstra opgaver, hvor I kan øve jer i Java programmering, hvis I har tid tilovers Links under Uge 1 og 4 på Ugeoversigten Java API (grænsefladen til Javas klassebibliotek) Afleveringsopgave: Raflebæger 3 (DieCup 3)

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

3 Klassediagram for musikafspiller Player void add(playlist p) List<PlayList> search(string q) void print() Playlist Track * angiver én-til-mange relation Vilkårligt mange objekter af den pågældende type Hvordan realiseres dette? * PlayList String getname() void addtrack(track t) void print() Track shortesttrack() Track longesttrack() List<Track> shorterthan(int length) List<Track> search(string q) void shuffle() * Track String getname() String getartist() int gettime() 3

4 Klassediagram for adressebog Man kan Tilføje et vilkårligt antal personer Udskrive adressebogen Finde et telefonnummer (via personens navn) Finde gennemsnitsalderen på personerne AddressBook void addperson(person p) void print() String getphone(string name) int averageage() * Person String getname() String getnumber() int getage() Problem Hvordan kan AddressBook "huske" alle personerne? Hvordan realiseres én-til-mange relationen? Svar Det kan vi gøre ved hjælp af en arrayliste 4

5 Eksempel: Index over bekendte // Feltvariabel private ArrayList<Person> persons;... // Initialisering (i konstruktør) persons = new ArrayList<>();... Objekterne i arraylisten skal være af type Person // Skab personer og tilføj dem til arraylisten public void createindex() { Person person; // Lokal variabel Husk parenteserne Kald af konstruktør Ellers typenavn og compile fejl person = new Person( "Jeppe", " ", 33 ); persons.add(person); person = new Person( "Ole", " ", 28 ); persons.add(person); person = new Person( "Linda", " ", 21 ); persons.add(person); 5

6 Objektdiagram for createindex persons:arraylist<person> persons.add(person); ArrayList<Person> size() = 0123 Person name number age 33 String "Jeppe" String " " Bemærk at index'erne nummereres fra 0 til size()-1 person:person Person name number age 28 String "Ole" String " " Person name number age 21 String "Linda" String " " 6

7 Realisering af én-til-mange relation UML UML Parametriseret type Feltvariabel (liste af personer) Metode (tilføjer person til listen) AddressBook ArrayList<Person> persons void addperson(person p) void print() String getnumber(string name) int averageage() * Person String getname() String getnumber() int getage() BlueJ 7

8 Realisering af en-til-mange relation Java For at realisere en en-til-mange relation i koden skal man gøre 3 ting IM 1. Importere klassen ArrayList import java.util.arraylist; ER KO 2. Erklære en feltvariabel af typen ArrayList< > private ArrayList<Person> persons; 3. Initialisere feltvariablen (gøres ofte i konstruktøren) public AddressBook() { persons = new ArrayList<>(); IMERKO reglen Vi behøver ikke at gentage parameteren til ArrayList ArrayList<> ArrayList<Person> Husk de runde parenteser Kald af konstruktør Ellers typenavn 8

9 ArrayList er en parametriseret type Dokumentationen for ArrayList fortæller, at der bl.a. er nedenstående metoder: Klassenavn Type parameter (i < > parenteser) public class ArrayList <E> { boolean add( E e){ void add(int index, E element){ boolean remove(object o){ E get(int index){ boolean contains (Object o){ boolean isempty(){ int size(){... Flere detaljer: se JavaDoc... Link 9

10 Arrayliste med heltal Parameteren til ArrayList skal være en objekt type Det betyder, at man ikke kan skrive ArrayList<int> I stedet skal man skrive ArrayList<Integer> Integer er en objekt type med de "samme værdier" som den primitive type int Integer er en wrapper klasse for int (wrapper = indpakning) Integer værdier konverteres automatisk til int værdier (og omvendt), når der er behov for det Eksempel private int i; private ArrayList<Integer> list list.add(i) int Integer i = list.get(3) Integer int 10

11 MusicOrganizer brug af ArrayList Vi vil lave en klasse som kan holde styr på vores musik Klassen minder lidt om vores musikafspiller, men den gør nogle lidt andre ting (kartotek over musik ingen aktiv afspilning) I første version repræsenteres hvert musiknummer ved hjælp af en tekststreng (String) Senere skal vi indføre en Track klasse til at repræsentere musiknumre MusicOrganizer Tilføj nummer Fjern nummer Udskriv nummer Antal numre? void addfile(string filename) void removefile(int index) void listfile(int index) int getnumberoffiles() 11

12 Oprettelse af arrayliste 1. Importere ArrayList klassen IM ER 2. Erklære en feltvariabel af type ArrayList< > KO 3. Initialisere feltvariablen i konstruktøren import java.util.arraylist; /** * A class to hold details of audio files. */ public class MusicOrganizer { // An ArrayList for storing the // file names of music files. private ArrayList<String> files; /** * Create a MusicOrganizer. */ public MusicOrganizer() { files = new ArrayList<>();... // Methods omitted... IMERKO reglen 12

13 Tilføjelse og fjernelse af musiknumre /** * Add a file to the collection. filename File to be added. */ public void addfile(string filename) { files. add(filename); Metode i ArrayList klassen /** * Remove a file from the collection. index Index of the file to be removed. */ public void removefile(int index) { if( index >= 0 && index < files.size() ) { files. remove(index); Metode i ArrayList klassen Inden vi kalder remove metoden tester vi om indexet er i brug (så vi undgår at få en IndexOutOfBoundsException) 13

14 Antal numre og udskrivning /** * Return the number of files in the collection. Number of files in the collection. */ public int getnumberoffiles() { return files. size(); Metode i ArrayList klassen /** * List a file from the collection. index Index of the file to be listed. */ public void listfile(int index) { if( index >= 0 && index < files.size() ) { String filename = files. get(index); System.out.println(filename); Udskrift Metode i ArrayList klassen Inden vi kalder get metoden tester vi om indexet er i brug (så vi undgår at få en IndexOutOfBoundsException) 14

15 Javas for-each løkke (udvidet for løkke) Bruges til at gennemløbe alle elementer i en Arrayliste og gøre "et eller andet" ved dem Kan bruges på alle Collections (og på Arrays) Keyword (reserveret ord) Erklæring af lokal variabel Reference til den arrayliste, der skal gennemløbes for ( String file : files ) { System.out.println(file); KROP (de sætninger der skal gentages, dvs. udføres på alle elementer i arraylisten) for-each løkken gør det nemt at lave en metode, der udskriver alle musiknumre /** * List all files from the collection. */ public void listallfiles() { for(string file : files) { System.out.println(file); 15

16 Find gennemsnitsalder /** * return the average age of the * people in the address book */ public int averageage() { return agesum() / persons.size(); Metoden er private (den kan kun bruges i denne klasse) /** * 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; Angiver at værdien af udtrykket på højresiden lægges til variablen på venstresiden 16

17 Udskrift af arrayliste Elementerne i en arrayliste kan udskrives via sætningen System.out.println(list); Alle klasser er subklasser af klassen Object Indeholder en metode som returnerer en tekstrepræsentation af det pågældende objekt String tostring(){ Det er denne metode, der anvendes til at få en tekstrepræsentation af Person objekterne Ingen linjeskift Klassenavn ID-nr (hexa-decimal værdi) 17

18 Pænere udskrift af arrayliste Redefinere tostring metoden til at returnere noget meningsfyldt (i stedet for klassenavn og hexa-decimalt ID-nr) public String tostring() { return name + " " + age + " years"; Indsætte linjeskift mellem de enkelte objekter i listen for(person person : list) { System.out.println(person); 18

19 Java API (Java's klassebibliotek) Hvis vi vil have mere info om ArrayList og String kan vi konsultere Java API'en som beskriver grænsefladen til Java's klassebibliotek Oversigt over alle klasser (og interfaces) i Java Library API = Application Programming Interface Link API er en softwaregrænseflade, der tillader et stykke software at interagere med andet software. Et typisk eksempel er at applikationer "taler" med styresystemet for at åbne en fil, hvorefter styresystemet på programmets vegne indlæser filen fra en harddisk eller lignende. I en nøddeskal kan et API betegnes som en måde at tilbyde tjenester, herunder data, fra et system til et andet system. 19

20 Eksempel på overloadning af metode String klassen i Java API Overloadning Flere metoder/konstruktører hedder det samme De har forskellige parametre Det gør at compileren kan kende forskel på dem 20

21 Afleveringsopgave: Raflebæger 3 (DieCup 3) Vi skal endnu en gang arbejde videre med vores Raflebæger I skal først lave et raflebæger, som kan indeholde et vilkårligt (positivt) antal terninger (som alle har 6 sider) For at gøre dette, skal I fastholde (huske) terningerne ved hjælp af en feltvariabel, der er en arrayliste (som jo kan indeholde et vilkårligt antal) DieCup ArrayList<Die> dies void roll() int geteyes() * Die int eyes void roll() int geteyes() Derudover skal I ændre konstruktøren for DieCup klasen, så den får en parameter, der angiver antallet af terninger // skaber raflebæger med n terninger DieCup(int n){ 21

22 Raflebæger 3 (DieCup 3) fortsat Dernæst skal I lave et raflebæger, som kan indeholde et vilkårligt (positivt) antal terninger, som hver har et vilkårligt antal sider ( 2) Bemærk at vi nu kan have et raflebæger, hvori vi har terninger med forskellige antal sider For at håndtere dette, skal I ændre konstruktøren for DieCup klassen, så antallet af terninger og antallet af deres sider kan specificeres Dette kan gøres ved hjælp af en arrayliste af heltal // skaber raflebæger med de specificerede terninger DieCup(ArrayList<Integer> dies){ [6,8,5,6] Endelig skal I tilpasse metoderne i TestDriver klassen, således at de kan anvendes til raflebægre af ovenstående slags 22

23 Opsummering ArrayList (eksempel på en Collection type) Kan bruges til at realisere én-til-mange relationer Har et variabelt (ubegrænset) antal elementer MusicOrganizer projektet Eksempel på brug af ArrayList Javas for-each løkke Alternativ til den almindelige for løkke Velgenet til gennemløb af arraylister (og andre collections) for(person person : persons) {... Java API (grænsefladen til Javas klassebibliotek) Afleveringsopgave: Raflebæger 3 (DieCup 3) 23

24 Det var alt for nu.. spørgsmål 24

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Fundamentale sprogbegreber

Fundamentale sprogbegreber Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

COMPUTERSPIL 1. Opgave 1. Opgave 2

COMPUTERSPIL 1. Opgave 1. Opgave 2 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

COMPUTERSPIL 1. Opgave 1

COMPUTERSPIL 1. Opgave 1 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Objektorienteret programmering

Objektorienteret programmering Forelæsning 1.2 Objektorienteret programmering Java er et OO programmeringssprog BlueJ og Greenfoot er programmeringsomgivelser for Java Praktiske ting Mail sendes til jer på adressen å[email protected]

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav. Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Introduktion til objektorientering. OO, Java og BlueJ

Introduktion til objektorientering. OO, Java og BlueJ Introduktion til objektorientering OO, Java og BlueJ Plan Time 1 Objekt-orienteret problemløsning BlueJ eksempel Time 2 Begreber og fænomener à klasser og objekter Modellering Øvelse: itunes Problemløsning

Læs mere

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...

Læs mere