Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Relevanta dokument
EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 9-10 Innehåll

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E>

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Föreläsning 5-6 Innehåll

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

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

Föreläsning REPETITION & EXTENTA

Föreläsning 3-4 Innehåll

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Föreläsning 13 Innehåll

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

OOP Objekt-orienterad programmering

Tentamen, EDAA20/EDA501 Programmering

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

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

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Repetition av OOP- och Javabegrepp

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

Föreläsning 2 Innehåll

Repetition av OOP- och Javabegrepp

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Arrayer. results

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 4 Innehåll

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 14 Innehåll

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Tentamen i Objektorienterad programmering

Grundläggande programmering med C# 7,5 högskolepoäng

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

Föreläsning 7-8 Innehåll

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

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

Del A (obligatorisk för alla)

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

Föreläsning 9 Innehåll

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen OOP

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

I ett program hantera man ofta samlingar av objekt av samma typ.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

Tentamen, EDAA10 Programmering i Java

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

F4. programmeringsteknik och Matlab

DAT043 Objektorienterad Programmering

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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

Typkonvertering. Java versus C

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

TENTAMEN OOP

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

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

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

Classes och Interfaces, Objects och References, Initialization

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

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 14. Filhantering

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

Objektorienterad Programmering (TDDC77)

Tentamen, EDA501 Programmering M L TM W K V

Instuderingsfrågor, del D

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.

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

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 till omtentamen för TDA540 Objektorienterad Programmering

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Föreläsning 2 Innehåll

Föreläsning 2, vecka 8: Repetition

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Transkript:

Föreläsning 11-12 Innehåll Hantera många element Tidigare har vi använt vektorer för att lagra många element av samma tp. Eempel: Klassen ArraList<E> Inläsning från tetfil, utskrift på tetfil int[] nbrs = new int[6]; Point[] vertices = new Point[3]; Nackdelar: När vi skapar vektorn måste vi bestämma hur många element den ska innehålla. Om vektorn inte är flld med element finns tomma platser med värdet 0, null Datavetenskap (LTH) Föreläsning 11-12 HT 2017 1 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 2 / 46 Eempel: polgon Godtckligt antal element Eempel: polgon forts Antag att vi vill hantera polgoner med ett godtckligt antal hörnpunkter. Vi måste skapa en tillräckligt stor vektor för punkterna. Det behövs också en variabel som håller reda på antal insatta punkter. Point[] vertices = new Point[8]; int n = 0; Eempel: Polgon med fra hörnpunkter vertices 0 1 2 3 4 5 6 7 null null null null 0 1 2 3 4 5 6 7 n 4 vertices n 0 null null null null null null null null 50 70 350 320 50 300 350 200 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 3 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 4 / 46

Eempel: polgon Sätta in en n punkt Diskutera Insättning av en n punkt: vertices[n] = new Point(200, 40); n++; Antag att vi ska ta bort en punkt från polgonen, t e andra punkten. vertices 0 1 2 3 4 5 6 7 null null null n 5 0 1 2 3 4 5 6 7 vertices null null null 50 70 350 320 50 300 350 200 200 40 n 5 50 70 350 320 50 300 350 200 200 40 Hur ska det gå till? Skissa på kod för detta. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 5 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 6 / 46 Eempel: polgon Ta bort en punkt Eempel: polgon Efter borttagning av punkten vertices n 5 0 1 2 3 4 5 6 7 null null null int pos = 1; for (int i = pos; i < n - 1; i++) { vertices[i] = vertices[i + 1]; vertices[n - 1] = null; n--; 50 70 350 320 50 300 350 200 200 40 0 1 2 3 4 5 6 7 vertices null null null null Tag bort andra punkten (finns på position 1 i vektorn): Täpp till hålet i vektorn genom att fltta alla efterföljande element ett steg till vänster. Uppdatera n eftersom antal punkter nu minskat med 1. n 4 50 350 320 50 350 200 200 40 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 7 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 8 / 46

Passar en vektor för detta? Klassen ArraList<E> I eemplet på föregående bilder måste vi gissa hur stor vektor vi behöver. Vad händer om vi vill sätta in fler än 8 punkter? Då måste vi skapa en n större vektor. För problem där antal element varierar är det enklare att använda den färdiga klassen ArraList. Ett ArraList-objekt använder internt en vektor och har färdiga metoder för att sätta in element i listan, ta bort element etc. Klassen ArraList<E> används för att lagra element i en lista. är en standardklass (i paketet java.util). innehåller alltid objekt (inte int, double,... ). lagrar internt sina element i en vektor. utökar vektorns storlek vid behov. har metoder för att sätta in, ta bort,... Datavetenskap (LTH) Föreläsning 11-12 HT 2017 9 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 10 / 46 Några metoder i klassen ArraList<E> /** Skapar en tom lista. */ ArraList(); /** Returnerar elementet på plats pos. */ E get(int pos); /** Lägger in obj sist. */ void add(e obj); /** Tar bort elementet på plats pos, returnerar det borttagna elementet. */ E remove(int pos); /** Returnerar antalet element. */ int size(); Generisk klass ArraList<E> är en generisk klass vilket innebär att den kan innehålla objekt av godtcklig tp. En generisk klass har en eller flera tpparametrar. Anges inom < > efter klassnamnet. När en generisk klass används ersätts tpparametrarna med klassnamn. Eempel där vi skapar en lista som kan innehålla String-objekt: ArraList<String> words = new ArraList<String>(); words.add("en"); words.add("lista"); words.add("med"); words.add("ord"); Datavetenskap (LTH) Föreläsning 11-12 HT 2017 11 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 12 / 46

ArraList kan bara innehålla objekt Wrapperklasser Man kan bara lagra objekt i en ArraList. Hur ska vi göra om vi vill ha en lista med heltal, reella tal, tecken? Lösning: Man måste använda motsvarande wrapperklass: inte ArraList<Integer> list = new ArraList<Integer>(); list.add(2); ArraList<int> list = new ArraList<int>(); Primitiva tper i Java: boolean short int long char bte float double Motsvarande wrapperklasser: Boolean Short Integer Long Character Bte Float Double Datavetenskap (LTH) Föreläsning 11-12 HT 2017 13 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 14 / 46 Wrapperklasser forts. Wrapperklasser fler metoder Wrapperklasser används när man behöver packa in ett värde av en primitiv datatp i ett objekt. T.e. när man vill lagra heltal i en Arralist. Eempel på användning av klassen Integer Integer a = new Integer(42); int b = a.intvalue(); // skapar ett Integer-objekt // hämtar heltalet i objektet a I wrapperklasserna finns även en hel del andra metoder. Eempel: statisk metod som konverterar från sträng till heltal: int n = Integer.parseInt("42"); och från heltal till sträng: String s = Integer.toString(42); a 42 b 42 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 15 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 16 / 46

Autoboing - unboing int vs Integer Automatisk konvertering mellan primitiv datatp och objekt. Eempel: Integer i = 42; Eempel: // autoboing till Integer-objekt ArraList<Integer> list = new ArraList<Integer>(); list.add(42); // autoboing int n = list.get(0); // unboing Praktiskt! När man använder en lista av tpen ArraList<Integer> behöver man alltså inte själv tänka på att konvertera från vanligt heltal till Integer-objekt och tvärtom. Observera skillnaden mellan tperna int (primitiv datatp) och Integer (klass). Eempel: Integer a = 42; int b = 42; a b // autoboing, därför samma resultat som // Integer a = new Integer(42); 42 42 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 17 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 18 / 46 Traversera elementen i en lista Mönster Behandla alla elementen i listan - for each Alternativ 1 Uppgift: Behandla alla elementen i en lista. Algoritm: för varje element i listan { använd elementet Det finns olika sätt att traversera listan: for each -sats använda metoderna get och size i en for-sats ArraList<Integer> list = new ArraList<Integer>(); list.add(53); list.add(-11); int sum = 0; for (int n : list) { sum = sum + n; // för varje heltal n i list Fungerar bra när man ska gå igenom listan från början. (Svårare om man inte ska starta från position 0.) Fungerar även för att traversera andra samlingar av element i Java. Man får inte ändra i listan med add eller remove inuti for-each-satsen. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 19 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 20 / 46

Behandla alla elementen i listan - for-sats med get och size Alternativ 2 ArraList<Integer> list = new ArraList<Integer>(); list.add(53); list.add(-11); Övning En lista numbers av tpen ArraList<Double> innehåller ett antal tal. Räkna antal positiva tal i numbers. int sum = 0; for (int i = 0; i < list.size(); i++) { sum = sum + list.get(i); Fungerar bra med klassen ArraList. Kan bli långsam i andra sammanhang. Metoden get finns inte i alla Javas samlingsklasser. Tänk på att list.size() levererar ett ntt värde om listans antal element ändras. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 21 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 22 / 46 Arralist<E> vs vektor Diskutera ArraList<E> passar bra när antal element inte är bestämt. Klassen har färdiga metoder för att lägga till element, ta bort element... En vektor passar bra när man på förhand vet antal element. Eempel: int[] nbrs = new int[6]; Observera att ett ArraList-objekt utifrån sett är en lista (och inte en bekvämare variant av en vektor). En nskapad lista är tom från början. En nskapad vektor har däremot redan från början det antal element som angavs vid skapandet av vektorn. Vad skrivs ut när man kör programmet? public class LengthEample { public static void main(string[] args) { ArraList<Integer> list = new ArraList<Integer>(); Sstem.out.println("Antal element i listan: " + list.size()); int[] v = new int[10]; Sstem.out.println("Antal element i vektorn " + v.length); Datavetenskap (LTH) Föreläsning 11-12 HT 2017 23 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 24 / 46

Eempel: Klassen Polgon Vi ska skriva en klass som representerar ett polgon som kan ritas i ett fönster. Vi ska kunna lägga till och ta bort punkter samt fltta polgonen. Inuti klassen behöver vi ett attribut som håller reda på polgonens hörnpunkter. private ArraList<Point> vertices; Det finns en färdig klass Point ijavasomkananvändas.menhär väljer vi att skriva en egen Point-klass som håller reda på koordinaterna i form av heltal. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 25 / 46 Klassen Point public class Point { private int ; private int ; /** Skapar en punkt med koordinaterna och. */ public Point(int, int ) { this. = ; this. = ; /** Tar reda på -koordinaten. */ public int getx() { return ; /** Tar reda på -koordinaten. */ public int gety() { return ; Datavetenskap (LTH) Föreläsning 11-12 HT 2017 26 / 46 Klassen Polgon public class Polgon { private ArraList<Point> vertices; /** Skapar en polgon med 0 hörnpunkter. */ public Polgon() { vertices = new ArraList<Point>(); /** Lägger till en n punkt med koordinaterna,. */ public void addverte(int, int ) { vertices.add(new Point(, )); /** Tar bort punkten på position pos. Punkterna numreras från 0 och uppåt i den ordning de lagts till. */ public void removeverte(int pos) { vertices.remove(pos); Datavetenskap (LTH) Föreläsning 11-12 HT 2017 27 / 46 Klassen Polgon forts /** Flttar polgonen avståndet d i -led, d i -led. */ public void move(int d, int d) { for (Point p : vertices) { p.translate(d, d); /** Ritar polgonen i fönstret w. */ public void draw(simplewindow w) { if (vertices.size() == 0) { return; Point last = vertices.get(vertices.size() - 1); w.moveto(last.getx(), last.gety()); for (Point p : vertices) { w.lineto(p.getx(), p.gety()); Datavetenskap (LTH) Föreläsning 11-12 HT 2017 28 / 46

Klassen Polgon forts public class PolgonEample { public static void main(string[] args) { Polgon p = new Polgon(); p.addverte(10, 150); p.addverte(50, 10); p.addverte(90, 120); SimpleWindow w = new SimpleWindow(200, 200, "Polgon"); p.draw(w); p.move(20, 20); p.draw(w); Övning Sökning Lägg till följande metod i klassen Polgon: /** Undersöker om det finns någon hörnpunkt med koordinaterna,. */ public boolean hasverte(int, int ) { Datavetenskap (LTH) Föreläsning 11-12 HT 2017 29 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 30 / 46 Sökmetoder i ArraList<E> Det finns färdiga metoder för att söka i listan: /** Söker upp ett element som matchar obj. Returnerar true om sådant element element finns, annars false. */ boolean contains(object obj); /** Söker upp ett element som matchar obj. Returnerar inde för första förekomsten av elementet, -1 om elementet inte finns. */ int indeof(object obj); /** Tar bort första förekomsten av objektet obj, om det finns. Returnerar true om ett element togs bort. */ boolean remove(object obj); Klassen Object i Java kan användas som tp för alla slags objekt. Det ingår inte i kursen att använda dessa metoder. Sökmetoder i ArraList<E> forts. Inuti ArraLists sökmetoder (de med en parameter av tpen Object) söks alla element igenom och jämförs med parametern obj. Vid jämförelsen används en metod boolean equals(object obj). Om den inte är implementerad på rätt sätt i elementens klass fungerar kanske inte sökningen som avsett. I Javas färdiga klasser finns metoden equals implementerad. Därför fungerar det att använda sökmetoderna om man använder en lista av tpen ArraList<Integer>, ArraList<Double>, ArraList<String>, Om man däremot har skrivit en egen klass C och lagrar objekt av C i en ArraList<C> måste man själv implementera metoden equals. Det är lite besvärligt och ingår inte i grundkursen. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 31 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 32 / 46

Diskutera Jämföra objekt - samma eller lika Jämföra objekt - samma eller lika Vad skrivs ut? Point p1 = new Point(50, 100); Point p2 = new Point(50, 100); Sstem.out.println(p1 == p2); Sstem.out.println(p1.getX() == p2.getx() && p2.gety() == p2.gety()); När man jämför objekt måste man ha klart för sig vad man vill jämföra. Vi har två olika objekt med samma innehåll. Uttrcket p1 == p2 undersöker om variablerna p1 och p2 har samma värde, dvs refererar till samma objekt. Uttrcket p1.getx() == p2.getx() && p1.gety() == p2.gety() undersöker om p1 och p2 har samma innehåll. p1 50 100 p1 50 100 p2 50 100 p2 50 100 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 33 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 34 / 46 Sökmetoder i ArraList<E> och metoden equals Överkurs Sökmetoder i ArraList<E> och metoden equals Överkurs, forts. Antag att du skrivit en klass C och vill lagra objekt i en lista av tpen ArraList<C>. Antag också att du med likhet menar att två C-objekt är lika när de har samma värde på ett eller flera attribut. Om du vill använda sökmetoderna (contains, ) måste du då skriva en egen equals-metod i klassen C. Finns det ingen metod boolean equals(object obj) i klassen C är det istället referenser som jämförs. I läroboken finns ibland metoder equals som är implementerade på ett förenklat sätt och inte fungerar som avsett i sökmetoderna. Metoden equals måste ha en parameter av tpen Object. Eempel på equals-metod i klassen Point: public class Point { private int ; private int ; // konstruktor och metoder public boolean equals(object obj) { if (! obj instanceof Point) { return false; Point p = (Point) obj; return == p. && == p.; Datavetenskap (LTH) Föreläsning 11-12 HT 2017 35 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 36 / 46

Insättning i sorterad följd Insättning i sorterad följd Eempel: ArraList<String> wordlist= new ArraList<String>(); wordlist.add("apelsin"); wordlist.add("banan"); wordlist.add("druva"); wordlist.add("enbär"); Uppgift: Lägg till ordet word idenredansorteradelistan. wordlist "apelsin" "banan" "druva" "enbär" Lösning: Gå framåt i listan tills det dker upp ett ord som är för stort. Sätt in word före detta ord: int pos = 0; while (pos < wordlist.size() && wordlist.get(pos).compareto(word) < 0) { pos++; wordlist.add(pos, word); word "citron" wordlist "apelsin" "banan" "citron" "druva" "enbär" Datavetenskap (LTH) Föreläsning 11-12 HT 2017 37 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 38 / 46 Diskutera Insättning i sorterad följd Insättning i sorterad följd Alternativ Vad händer word ska in först i listan? Vad händer word ska in sist i listan? Vad händer om listan är tom? wordlist "apelsin" "banan" "druva" "enbär" Lösning: Gå framåt i listan tills det dker upp ett ord som är för stort. Sätt in word före detta ord: int pos; // Måste deklareras utanför for-satsen för att // kunna användas i anropet av add. for (pos = 0; pos < wordlist.size(); pos++) { if (wordlist.get(pos).compareto(word) >= 0) { break; // avbrter loopen wordlist.add(pos, word); word "ananas" wordlist "apelsin" "banan" "citron" "druva" "enbär" Datavetenskap (LTH) Föreläsning 11-12 HT 2017 39 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 40 / 46

Klassen Scanner tr catch-sats Vi har tidigare skapat Scanner-objekt som läser från tangentbordet: Scanner scan = new Scanner(Sstem.in); Ett Scanner-objekt kan också läsa från en sträng: String s = "1 2 3 4 5"; Scanner scan = new Scanner(s); Man kan också skapa Scanner-objekt som läser från en fil (här från en fil med namnet indata.tt): Scanner scan = new Scanner(new File("indata.tt")); Vissa fel, t.e. att försöka öppna en fil som inte finns, måste man ta hand om i en tr catch-sats. I eemplet nedan görs ett försök att öppna filen indata.tt. Om det inte går avbrts eekveringen av satserna i tr-blocket och satserna i catch-blocket kommer att utföras. tr { // Här försöker vi öppna filen indata.tt scan = new Scanner(new File("indata.tt")); catch (FileNotFoundEception e) { // Här kan man skriva vad som ska hända om // filen inte kan öppnas. Datavetenskap (LTH) Föreläsning 11-12 HT 2017 41 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 42 / 46 Läsa indata från fil Eempel Utskrift på fil Klassen PrintWriter public class SumNumbers { public static void main(string[] args) { Scanner scan = null; tr { scan = new Scanner(new File("tal.tt")); catch (FileNotFoundEception e) { Sstem.out.println("Filen kunde inte öppnas"); Sstem.eit(1); int sum = 0; while (scan.hasnetint()) { sum = sum + scan.netint(); Sstem.out.println("Summa: " + sum); scan.close(); public class PrintWriterEample { public static void main(string[] args) { PrintWriter out = null; tr { out = new PrintWriter(new File("utdata.tt")); catch (FileNotFoundEception e) { Sstem.out.println("Filen kunde inte öppnas"); Sstem.eit(1); // utskrifter med out.print hamnar på filen utdata.tt out.close(); Datavetenskap (LTH) Föreläsning 11-12 HT 2017 43 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 44 / 46

Utskrift på fil Eempel Checklista public class PrintSquareRoots { public static void main(string[] args) { PrintWriter out = null; tr { out = new PrintWriter(new File("utdata.tt")); catch (FileNotFoundEception e) { Sstem.err.println("Filen kunde inte öppnas"); Sstem.eit(1); for (int i = 1; i <= 100; i++) { out.println("kvadratroten av " + i + " = " + Math.sqrt(i)); out.close(); Eempel på vad du ska kunna Förklara begreppet generisk klass. Använda klassen ArraList<E>. deklarera och skapa en lista sätta in element ta bort element traversera en lista och behandla alla element söka efter ett element i listan sätta in ett element i en sorterad följd Skriva ut data på en tetfil Läsa in data från en tetfil Datavetenskap (LTH) Föreläsning 11-12 HT 2017 45 / 46 Datavetenskap (LTH) Föreläsning 11-12 HT 2017 46 / 46