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



Relevanta dokument
OOP Objekt-orienterad programmering

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

Tentamen OOP

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Föreläsning 3-4 Innehåll

Föreläsning 5-6 Innehåll

Lösningsförslag tentamen FYTA11 Java

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

DELPROV 1 I DATAVETENSKAP

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

Del A (obligatorisk för alla)

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Laboration 13, Arrayer och objekt

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

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Objektorienterad programmering i Java

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

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

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

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

TENTAMEN OOP

Laboration A Objektsamlingar

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen i Objektorienterad programmering

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

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

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

Typkonvertering. Java versus C

Objektorienterad programmering D2

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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 7. Träd och binära sökträd

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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.

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

Saker du ska kunna Föreläsning 13 & 14

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

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

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Föreläsning REPETITION & EXTENTA

Lösningsförslag till tentamen

Del A (obligatorisk för alla)

tentaplugg.nu av studenter för studenter

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

TENTAMEN OOP

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

TENTAMEN OOP

Föreläsning 2, vecka 8: Repetition

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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 6: Metoder och fält (arrays)

public boolean containskey(string key) { return search(key, head)!= null; }

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

Tentamen i Programmeringsteknik I, ES,

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

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

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Tentamen i Programmeringsteknik I

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

Objektsamlingar i Java

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen, EDAA20/EDA501 Programmering

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

tentaplugg.nu av studenter för studenter

Tentamen. Lösningsförslag

Tentamen FYTA11 Javaprogrammering

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Malmö högskola 2008/2009 CTS

Dugga Datastrukturer (DAT036)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

TDDC77 Objektorienterad Programmering

Föreläsning 7. for-satsen Fält

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Transkript:

Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap. Föreläsning 4 Katarina Blom 1 2 Array Lists Klassen ArrayList (i paket java.util) lagrar listor av objekt, och kan användas istället för fält. I ArrayList finns bla metoder för att sätta in och ta bort element ur listor. Längden på listan i ArrayList är dymaisk. (Fält har en fix längd). För att skapa ett objekt av ArrayList, använd en av konstruktorerna i klassen: ArrayList<PointD> acc = new ArrayList<PointD>(); För att använda ett ArrayList-objekt; anropa metoder som finns att tillgå: acc.add(new PointD(2,3)); acc.add(new PointD(-3,4)); acc.add(new PointD(9,10)); int no = acc.size(); PointD elem = acc.get(1); Sökning och sortering Beräkna antal element som uppfyller ett visst villkor: Löp igenom alla element i listan, om vilkoret är uppfyllt uppdatera en räknare. double r = 5;... int matches = 0; for(int i=0; i<acc.size(); i=i+1){ PointD a = acc.get(i); if((a.getx()*a.getx()+a.gety()*a.gety())<r*r) matches = matches+1; Sök ett värde: Löp igenom elementen i listan; avsluta när en träff hittats. int r = 3;... PointD a = null; for(int i=0; i<acc.size();i=i+1){ a = acc.get(i); if(a.getx()*a.getx()+a.gety()*a.gety()<r*r) break; a = null; 3 4

Sök efter största/minsta element: Inititera ett startelement, sök sedan igenom alla element och uppdatera startelementet ifall ett större/mindre element påträffas. PointD largestyet = acc.get(0); for(int i=1; i<acc.size(); i=i+1){ PointD a = acc.get(i); if(a.getx() > largestyet.getx()) largestyet = a; Sortera listan med avseende på punkternas X-koordinater: ArrayList<PointD> sortedacc; sortedacc = new ArrayList<PointD>(); while(acc.size()>0){ PointD largestyet = acc.get(0); for(int i=1; i<acc.size(); i=i+1){ PointD a = acc.get(i); if(a.getx() > largestyet.getx()) largestyet = a; sortedacc.add(largestyet); acc.remove(largestyet); Klassen PointD (från Lab1) beskriver en punkt i planet: public class PointD{ private double x,y; public PointD(){ this(0.0,0.0); public PointD(double x, double y){ this.x = x; this.y = y; public double getx(){ return x; public double gety(){ return y; public String tostring(){ return "("+x+","+y+")"; 5 6 Om en lista är sorterad kan man använda binärsökning: public static int binsearch(string[] a, String x){ int start=0; int slut=a.length-1; int mitten; while(start<=slut){ mitten=(start+slut)/2; if(a[mitten].compareto(x)<0) start = mitten+1; else if(a[mitten].compareto(x)>0) slut = mitten-1; else{ return mitten; return -1; Mängder av naturliga tal Definiera en klass vars objekt är mängder av naturliga tal. Metoder som ska finnas public void insert(int n) public void remove(int n) public boolean ismember(int n) Hur bör talmängden lagras? 7 8

Förslag? oarraylist o Fält av heltal o Ett boolskt fält o Fler förslag? Ett boolskt fält Mängden {1,4 representeras av: false 0 true 1 false 2 false 3 true 4 Fördelar/nackdelar med respektive lagringsform? 1 och 4 ingår 0, 2 och 3 ingår inte. Mängden är uppåt begränsad av 4 Fördelar/Nackdelar med representationen? En bra representation om man kan ange en övre gräns för vilka tal som kan förekomma. Var anges denna gräns? 9 10 Klassen NatSet public class NatSet{ private boolean[] elems; public NatSet(int max){ elems = new boolean[max+1]; public void insert(int n){ elems[n] = true;... En förbättrad version av insert public void insert(int n){ checkrange(n); elems[n] = true; private void checkrange(int n){ if(n<0 n>elems.length) throw new IllegalArgumentException(); Vilka förvillkor gäller för parametern till insert? 11 12

Vilket är det största primtalet mindre än 10 000 000? o Bilda mängden av alla primtal mindre än 10 000 000. o Det sökta talet är det största elementet i denna mängd. Erathostenes såll För att hitta alla primtal mindre än 50 1: Skriv upp alla tal mellan 2 och 50, och ringa in 2. 2: Stryk alla multipler av det inringade talet. 3: Ringa in första ej inringade eller strukna tal. 4: Upprepa 2 och 3 tills??? 13 14 Erathostenes såll i java private static NatSet primesto(int n){ NatSet result = new NatSet(n); for(int i=2; i<=n; i++) result.insert(i); int p = 2; while(p<=(int)math.sqrt(n)){ Besvara frågan public static void main(string[] arg){ int n = Integer.parseInt(arg[0]); NatSet primes = primesto(n); while(!primes.ismember(n)) n--; System.out.println(n); for(int k=2; k*p<=n; k++) result.remove(k*p); p++; while(!result.ismember(p)) p++; return result; 15 16

Dokumentation Man bör kommentera (och dokumentera) sin kod. Använd javadoc Publika metoder dokumenteras med dokumentationskommentarer. Beskriv kort vad metoden gör, vad den returnerar och hur den anropas (dvs. vad ev. inparametrar betyder). Publika variabler och konstanter dokumenteras med dokumentationskommentarer. Beskriv kort vad variabeln eller konstanten står för. Privata metoder, variabler och konstanter kommenteras för att öka förståelsen av koden för en eventuell läsare. Dessa kommentarer ska inte vara dokumentationskommentarer utan vanlig kommentarer. Avbildning, en speciell sorts lista En klass för att lagra <nyckel,värde>par för att senare kunna slå upp värdet givet nyckeln. Varje nyckel kan bara avbildas på ett värde. Ett svensk-engelskt lexikon. Lagra de svenska orden (nyckeln) i par med sin engelska översättning (värdet). Ett bilregister. Registreringsnummret är nyckeln. Informationen om bilen och bilägaren utgör värdet. En diskret funktion: Lagra <x,f(x)>. I Java finns tex. klassenhashmap för avbildningar. 17 18 En klass för att lagra bilinformation public class BilInfo{ private String regnr; private String info; public BilInfo(String key, String value){ regnr = key; info = value; public String getkey(){ return regnr; public String getinfo(){ return info; Klassen Bilregister (början) public class Bilregister{ private BilInfo[] entry; private int storl; public Bilregister(int maxstorl){ entry = new BilInfo[maxstorl];... Typiska metoder för avbildningar: Sätt in <nyckel,värde>-par i avbildningen: public void insert(string key, String value) Sök efter ett värde givet nyckeln: public String find(string key) 19 20

Metoden insert private int findindex(string key){ for(int i=0;i<storl;i++){ if(entry[i].getkey().equals(key)) return i; return storl; public void insert(string k, String v){ int i = findindex(k); if(i==storl) storl++; entry[i]=new BilInfo(k,v); Vad gör man vid insättning om det redan finns ett par med samma nyckel? Ett expanderbart bilregister Om fältet entry blir fullt, allokera ett nytt dubbelt så stort fält och kopiera datan dit. private void dubblera(){ BilInfo[] ny = new BilInfo[2*entry.length]; for(int i=0;i<entry.length;i++) ny[i] = entry[i]; entry = ny; public void insert(string k, String v){ int i = findindex(k); if(i==storl){ if(storl==entry.length) dubblera(); storl++; entry[i]=new BilInfo(k,v); Såhär fungerar tex. ArrayList 21 22 Sökning public String find(string key){ int i = findindex(key); if(i<storl) return entry[i].getinfo(); else return null; Tvådimensionella fält Ett fält kan ha två (eller fler) index. En matris med 10 rader och 15 kolumner: double[][] M = new double[10][15]; Vad gör man vid sökning om det inte finns något par med den givna nyckeln? M är ett fält av rader, som var och en är ett fält av double. Att genomlöpa en matris: for(int i=0; i<m.length;i++) for(int j=0;j<m[i].length;j++) M[i][j] = Math.random(); 23 24

Klassen Arrays I klassen java.util.arrays finns metoder man kan använda i samband med fält (tex. sökning och sortering). Överlastning (eng. overloading) Man kan ha flera metoder med samma namn om de har olika parameterlistor. Det kallas överlastning. Varför finns det nio metoder fill i Arrays med två parametrar och nio metoder med fyra? Hur skiljer sig koden åt mellan dessa nio? 25 26