Laboration A Objektsamlingar



Relevanta dokument
Malmö högskola 2007/2008 Teknik och samhälle

Malmö högskola 2008/2009 CTS

Malmö högskola 2007/2008 Teknik och samhälle

OOP Objekt-orienterad programmering

Föreläsning 2. Länkad lista och iterator

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Laboration 13, Arrayer och objekt

Del A (obligatorisk för alla)

Tentamen, EDAA20/EDA501 Programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad programmering i Java

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Del A (obligatorisk för alla)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 2. Länkad lista och iterator

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Malmö högskola 2007/2008 Teknik och samhälle

TENTAMEN OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Objektsamlingar i Java

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Arrayer. results

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 8: Exempel och problemlösning

Repetition av OOP- och Javabegrepp

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Repetition av OOP- och Javabegrepp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TENTAMEN OOP

Lösningar för tenta 3 DAT043,

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 2 Datastrukturer (DAT037)

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 4 Innehåll

Länkade strukturer. (del 2)

Generisk klass med typparameter Inre klass - ListIterator

Objektorienterad programmering i Java I

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Laboration 1 - Grunderna för OOP i Java

Tentamen OOP

TENTAMEN OOP

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

DAT043 Objektorienterad Programmering

Malmö högskola 2012/2013 Teknik och samhälle

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Kopiering av objekt i Java

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen, EDAA10 Programmering i Java

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

trafiksimulering Intro OU5 trafiksimulering

Introduktion till Datalogi DD1339. Föreläsning 5 13 okt 2014

Programmering för språkteknologer II, HT2011. Rum

Programmering för språkteknologer II, HT2014. Rum

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Föreläsning 10. ADT:er och datastrukturer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen i Objektorienterad programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Tentamen, EDA501 Programmering M L TM W K V

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

OOP Objekt-orienterad programmering

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Den som bara har en hammare tror att alla problem är spikar

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

PROGRAMMERING-Java Omtentamina

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen , Introduktion till Java, dtaa98, dtea53

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Transkript:

Laboration A Objektsamlingar Avsikten med laborationen är att du ska träna på att använda ett par objektsamlingar. Uppgift 1 Titta genom föreläsningsunderlaget DA129AFAHT07.pdf och testkör exemplen (se nedan). Läs även KomA.pdf vilken kompletterar informationen i powerpointunderlaget. NoGenerics.java Detta exempel visar ett par misstag man kan göra när man inte använder generics. 1. Du får execveringsfel när du kör programmet. Det beror på att java kastar alla objektreferenser till Person-referenser i den sista for-loopen: for(int i=0; i<list.size(); i++) { person = (Person)list.get(i); // ClassCastException kan inträffa System.out.println(person.getNamn()); Men detta blir fel eftersom det är ett String-objekt bland Person-objekten. Avmarkera raden list.add("hoppsan"); 2. Kör åter programmet. Det blir exekveringsfel igen. Denna gång beror det på raden String str = (String)list.get(0); ArrayList-objektet innehåller endast Person-objekt men programmet försöker att typkonvertera till referens till String. Och det går inte. Avmarkera raden String str = (String)list.get(0); och kör programmet på nytt. Generics.java Om man använder generics kan man inte göra felen som i förra exemplet. Om man lägger till någon av raderna: list.add("hoppsan"); eller String str = (String)list.get(0); så får man kompileringsfel Felet upptäcks redan vid kompilering. Listhastighet.java Se KomA.html SetEx.java Se KomA.html Hastighet.java Se KomA.html IteratorEx.java Programmet demonstrera hur man itererar genom samtliga objekt i en Collectionimplementering. I exemplet är det en HashSet som används. DA129A, Programmering 1 1

Första varianten använder en while-loop vilken upprepas så länge det finns fler objekt i Iterator-objektet. Vid varje upprepning tas ett element ur Iterator-objektet och elementets namn skrivs ut. I andra varianten används en for-loop. I varje upprepning i for-loopen görs samma sak som i första exemplet, bara lite mer kompakt kodat. Uppgift 2 Album Klassen Foto är given och kan användas för att hålla reda på en bild vilken lagras på en hårddisk på datorn. Följande attribut innehåller klassen Foto: motiv Ett namn på bilden, t.ex. Högst upp i Eifeltornet årtal Det årtal bilden är tagen kategori Bilder kan tillhöra olika kategorier, Foto.FAMILJ, Foto.BARNBARN, Foto.RESOR och Foto.ÖVRIGT lagringsplats plats på hårddisken, t.ex. c:/bilder/studier.jpg. public class Foto { public static final int ÖVRIGT=0, FAMILJ=1, BARNBARN=2, RESOR=3; private String motiv; private int årtal; private int kategori; private String lagringsplats; public Foto(String motiv, int årtal, int kategori, String lagringsplats) { this.motiv = motiv; this.årtal = årtal; if( (kategori<övrigt) (kategori>resor) ) kategori = ÖVRIGT; this.kategori = kategori; this.lagringsplats = lagringsplats; public void setlagringsplats(string lagringsplats) { this.lagringsplats = lagringsplats; public String getmotiv() { return motiv; public int getårtal() { return årtal; public int getkategori() { return kategori; public String getlagringsplats() { return lagringsplats; public String tostring() { return "Motiv: " + motiv + " Årtal: " + årtal; Du ska skriva klassen Album vilken ska användas för att hålla reda på Foto-objekt. På nästa sida ser du ett skal till klassen. Din uppgift är att lägga till kod i klassens metoder. 2

public class Album { private ArrayList register = new ArrayList(); // foto läggs till sist i register public void läggtill(foto foto) { // Om foto finns i register tas foto bort och true returneras. Om foto inte finns i register // ska metoden returnera false. public boolean tabort(foto foto) { // Metoden returnerar antalet Foto-objekt som lagras i albumet public int antalfoto() { // Metoden ska returnera Foto-objektet i angiven position. Om index är en position som inte finns // i listan ska undantaget IndexOutOfBoundsException kastas. public Foto hämtafoto( int index ) { // Skriver ut alla Foto-objekt i register med hjälp av tostring-metoden public void listaalla() { // Returnerar ett ArrayList-objekt som innehåller alla bilder av viss kategori public ArrayList getkategori(int kategori) { // Returnerar ett nytt Album-objekt som innehåller alla bilder från ett visst årtal. Det gamla // albumet ska vara oförändrat. public Album getårtal(int årtal) { public void läggtill(foto foto) Metoden ska lägga till ett Foto-objekt sist i register. Detta gör man med add-metoden. public void läggtill(foto foto) { register.add(foto); public boolean tabort(foto foto) Metoden ska ta bort bifogat Foto-objektet ur registret. Om så sker ska true returneras. Om Foto-objektet inte finns i registret ska false returneras. Detta gör man med metoden remove. public boolean tabort(foto foto) { return register.remove(foto); public int antalfoto() Metoden ska returnera antalet Foto-objekt som lagras i albumet. Detta gör man med metoden size. public int antalfoto() { return register.size(); 3

public Foto hämtafoto( int index ) Metoden ska returnera Foto-objektet i en viss position i albumet. Detta gör man med getmetoden. Man måste dock göra om referensen till en Foto-referens. Om man ger ett felaktigt index till get-metoden kastas ett IndexOutOfBoundException. public Foto hämtafoto(int index) { return (Foto)register.get(index); public void listaalla() Metoden ska anropa tostring-metoden för alla Foto-objekt och skriva ut strängarna som returneras (en per Foto-objekt). För att gå igenom alla lagrade Foto-objekt har man två alternativ: 1. Man kan använda en vanlig loop och anropa metoden get( index ) för varje giltig position. 2. Man kan använda ett Iterator-objekt. Ett sådant får man genom anrop av metoden iterator. I nedanstående lösning används båda varianterna. Variant 2 är kommentarmarkerad. public void listaalla() { for( int i = 0; i < register.size(); i++ ) { System.out.println( register.get( i ).tostring() ); // public void listaalla() { // Iterator iter = register.iterator(); // while(iter.hasnext()) { // System.out.println( iter.next().tostring() ); // // public ArrayList getkategori(int kategori) Metoden ska returnera en ArrayList med alla Foto-objekt som tillhör en viss kategori. Eftersom ArrayList-objekt växer dynamiskt är lösningen ganska enkel: 1. Skapa ett ArrayList-objekt vilket ska returneras av metoden (res nedan) 2. Iterera genom arraylisten som innehåller samtliga Foto-objekt 3. Om ett Foto-objekt har korrekt kategori så lagra objektet i den nya arrayen. Detta innebär att Foto-objektet lagras i flera ArrayList-objekt. 4. Returnera den nya arrayen. public ArrayList getkategori(int kategori) { ArrayList res = new ArrayList(); for( int i = 0; i < register.size(); i++ ) { foto = ( Foto )register.get( i ); // typkonvertering till Foto-referens if( foto.getkategori() == kategori ) res.add( foto ); 4

public Album getårtal(int årtal) Metoden ska skapa ett Album-objekt vilket ska fyllas med de Foto-objekt som har ett visst årtal. Lösningen likanr föregående lösning men ett Album-objekt används i stället för ett ArrayList-objekt. public Album getårtal(int årtal) { Album res = new Album(); for( int i = 0; i < register.size(); i++ ) { foto = ( Foto )register.get( i ); if( foto.getårtal() == årtal ) res.läggtill( foto ); Teskör nedanstående programmet och kontrollera att du får samma körresultat. En fullständig Album-klass finns längst bak i laborationen om du får problem med din egen lösning. Testprogram Album album = new Album(); Foto f1 = new Foto("På badstranden", 2003, Foto.FAMILJ, "C:/bilder/bada.jpg"); Foto f2 = new Foto("Tältet", 2003, Foto.FAMILJ, "C:/bilder/campa.jpg"); Foto f3 = new Foto("Italien", 2003, Foto.RESOR, "C:/bilder/italien.jpg"); album.läggtill(f1); album.läggtill(f2); album.läggtill(new Foto("Jenny hoppar", 2002, Foto.BARNBARN, "C:/bilder/jenny1.jpg")); album.läggtill(new Foto("Erik 4 år", 2003, Foto.BARNBARN, "C:/bilder/erik4.jpg")); album.läggtill(f3); System.out.println("SAMTLIGA FOTO, " + album.antalfoto() + " st"); album.listaalla(); Album år2003 = album.getårtal(2003); System.out.println("\nÅr 2003"); år2003.listaalla(); ArrayList barnbarnen = album.getkategori(foto.barnbarn); System.out.println("\nBARNBARNEN"); Iterator iter = barnbarnen.iterator(); while(iter.hasnext()) { foto = (Foto)iter.next(); System.out.println(foto); System.out.println("\nBARNBARNEN ÅR 2003"); ArrayList barnbarn2003 = år2003.getkategori(foto.barnbarn); for(int i=0; i<barnbarn2003.size(); i++) System.out.println(barnbarn2003.get(i)); album.tabort(f2); System.out.println("\nSAMTLIGA FOTO"); album.listaalla(); Körresultatet är på nästa sida. 5

Körresultat SAMTLIGA FOTO, 5 st Motiv: På badstranden Årtal: 2003 Motiv: Tältet Årtal: 2003 Motiv: Jenny hoppar Årtal: 2002 Motiv: Italien Årtal: 2003 År 2003 Motiv: På badstranden Årtal: 2003 Motiv: Tältet Årtal: 2003 Motiv: Italien Årtal: 2003 BARNBARNEN Motiv: Jenny hoppar Årtal: 2002 BARNBARNEN ÅR 2003 SAMTLIGA FOTO Motiv: På badstranden Årtal: 2003 Motiv: Jenny hoppar Årtal: 2002 Motiv: Italien Årtal: 2003 6

Uppgift 2 public class Album { private ArrayList register = new ArrayList(); public void läggtill(foto foto) { register.add(foto); public boolean tabort(foto foto) { return register.remove(foto); public int antalfoto() { return register.size(); public Foto hämtafoto(int index) { return (Foto)register.get(index); public void listaalla() { Iterator iter = register.iterator(); while(iter.hasnext()) System.out.println(iter.next()); public ArrayList getkategori(int kategori) { ArrayList res = new ArrayList(); for(int i=0; i<register.size(); i++) { foto = (Foto)register.get(i); if(foto.getkategori() == kategori) res.add(foto); public Album getårtal(int årtal) { Album res = new Album(); for(int i=0; i<register.size(); i++) { foto = (Foto)register.get(i); if(foto.getårtal() == årtal) res.läggtill(foto); 7