Dagens föreläsning. Instickssortering med hjälp av en ArrayList. Omslagsklasser. Metoderna equals och compareto. Läsa filer. Scanner-repetition

Relevanta dokument
Dagens föreläsning. Omslagsklasser. Metoderna equals och compareto. Läsa filer. Programs hantering av fel. Scanner-repetition.

Dagens text. Instickssortering m h a ArrayList. Lite mer om strängar. Redigering av utskrifter. Metoden format i

Dagens text. Instickssortering. Lite mer om strängar. Metoden format i. Läsning från filer. ArrayList-exempel.

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

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

Redovisningarna denna vecka

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

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

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

OOP Objekt-orienterad programmering

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

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

Tentamen, EDAA20/EDA501 Programmering

Repetition av OOP- och Javabegrepp

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

Repetition av OOP- och Javabegrepp

Del A (obligatorisk för alla)

Del A (obligatorisk för alla)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Arrayer. results

Föreläsning 3-4 Innehåll

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 REPETITION & EXTENTA

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

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

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

Input. Programmering. Andra källor

Tentamen OOP

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.

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

Att skriva till och läsa från terminalfönstret

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

JAVAUTVECKLING LEKTION 7

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

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

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

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

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

DAT043 - föreläsning 8

[] Arrayer = Indexerad variabel

OOP Objekt-orienterad programmering

Skillnader mellan Python och Java

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Föreläsning 14. Filhantering

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

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

TENTAMEN OOP

Instuderingsfrågor, del D

Sammanfattning och repetition utgående från typiska tentamensuppgifter

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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 3. Stack

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

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.

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

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.

Laboration A Objektsamlingar

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

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

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

TDDC77 Objektorienterad Programmering

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

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

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

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

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.

Föreläsning 6: Metoder och fält (arrays)

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

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

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

Föreläsning 7-8 Innehåll

Presentation av trafiksimuleringsprojektet

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Transkript:

(14 februari 2019 F5 1 ) Dagens föreläsning Scanner-repetition ArrayList Instickssortering med hjälp av en ArrayList Omslagsklasser Metoderna equals och compareto Läsa filer

(14 februari 2019 F5 2 ) Scanner-repetition Ett Scanner-objekt klumpar ihop tecken större enheter som heltal, flyttal och strängar: Scanner objekt hasnext() hasnextint() hasnextdouble() hasnextline() 1 2 En teckenström från tangentbordet, en fil eller ett String objekt 6. 8 H e j nextline() next() nextint() nextdouble() radslut 3. Hej String av metoden next() 2. 6.8 double av metoden nextdouble() 1. 12 int av metoden nextint()

(14 februari 2019 F5 3 ) Scanner-illustration Klumpar kan alltid tolkas som strängar: Scanner objekt hasnext() hasnextint() hasnextdouble() hasnextline() En teckenström från tangentbordet, en fil eller ett String objekt 1 2 6. 8 H e j nextline() next() nextint() nextdouble() radslut 3. Hej String av metoden next() 2. 6.8 String av metoden next() 1. 12 String av metoden next()

(14 februari 2019 F5 4 ) Scanner-illustration Man kan också hantera strömmen radvis: Scanner objekt hasnext() hasnextint() hasnextdouble() hasnextline() En teckenström från tangentbordet, en fil eller ett String objekt 1 2 6. 8 H e j nextline() next() nextint() nextdouble() radslut 12 6.8 Hej String av metoden nextline()

(14 februari 2019 F5 5 ) Hur signalerar jag Slut på data? public class ScannerDemo5 { public static void main(string[] args) { Scanner scan = new Scanner(System.in); int counter = 0; while (scan.hasnext()) { System.out.print(scan.next() + " "); counter++; System.out.println("Antal tokar: " + counter); Systemberoende! Inte definierat av Java. Typiskt ctrl-d.

Demo Scanner4 (14 februari 2019 F5 6 ) Ex: Scanner41 som läser och summera tal på rader public static void main(string[] args) { //Locale.setDefault(Locale.US); Locale.setDefault(new Locale("sv", "SE")); Scanner scan = new Scanner(System.in); Svensk standard Huvud-scanner while (scan.hasnextline()) { String line = scan.nextline(); Scanner linescan = new Scanner(line); double sum = 0; while (linescan.hasnextdouble()) { sum += linescan.nextdouble(); linescan.close(); System.out.format("Summan är %5.1f", sum); scan.close(); Så länge det finns rader: Läs en rad En rad-scanner Så länge fler tal på raden Läs och summera Stäng rad-scannern Stäng huvud-scannern

(14 februari 2019 F5 7 ) Klassen ArrayList Ett alternativ till arrayer

(14 februari 2019 F5 8 ) Arrayers styrkor och svagheter + Effektivt minnesutnyttjande + Snabb åtkomst till element med visst index + Snabb sökning om sorterat (med binär sökning eller hashteknik) Fix storlek Inlägg besvärligt om sorterat

(14 februari 2019 F5 9 ) Ett alternativ till arrayer: ArrayList En ArrayList är en arrayliknande struktur med följande egenskaper: Kan växa och krympa automatiskt Kan skjuta in nya element var som helst Kan ta bort element var som helst Kan använda index men en annan syntax än i arrayer Kan bara lagra objekt inte primitiva datatyper

(14 februari 2019 F5 10 ) Exempel ArrayList import java.util.arraylist; ArrayList<String> names; names = new ArrayList<String>(); Måste importeras Typen måste anges i deklarationen och i konstruktionen names.add("olle"); names.add("lisa"); names.add("lasse"); add lägger till sist System.out.println(names.get(1)); System.out.println(names); System.out.println("Size: " + names.size()); Lisa [Olle, Lisa, Lasse] Size: 3

(14 februari 2019 F5 11 ) Exempel ArrayList Der går att skjuta in, ändra och ta bort element. Exempel: names.add(1, "Anna"); System.out.println(names); names.set(2, "Britta"); System.out.println(names); [Olle, Anna, Lisa, Lasse] [Olle, Anna, Britta, Lasse] names.remove(0); names.remove("lasse"); System.out.println(names); [Anna, Britta]

(14 februari 2019 F5 12 ) Exempel ArrayList En ArrayList kan användas för att lagra godtyckliga objekt (av samma typ). Exempel: ArrayList<Turtle> turtles = new ArrayList<Turtle>(); ArrayList<Dice> dice = new ArrayList<Dice>(); ArrayList<int[]> intlists = new ArrayList<int[]>();

(14 februari 2019 F5 13 ) ArrayList: Summering av metoder int size() add(e e) Returnerar aktuellt antal lagrade värden. Lägger till sist. add(int i, E e) Lägger till på index i. boolean contains(e e) true om e finns i listan, annars false. E get(int i) Returnerar värde lagrat på index i. E set(int i, E e) E remove(int i) boolean remove(e e) void clear() Byter ut element på plats i Tar bort element på index i. Returnerar det borttagna Tar bort (första förekomst av) element e Tar bort alla element ur listan.

(14 februari 2019 F5 14 ) ArrayList ArrayList-objekt är implementerade med arrayer. Det innebär, t ex att operationen add och remove kan flytta på element. Exempel: Vad är problemet koden for (int i=0; i<al.size(); i++) { if (al.get(i).isdead()) { al.remove(i); Kommer att missa det som låg på plats i + 1 Gör så här i stället: for (int i = al.size()-1; i >= 0; i--) { if (al.get(i).isdead()) { al.remove(i);

(14 februari 2019 F5 15 ) Omslagsklasser Hur gör man för att lagra t ex int eller double? Man använder omslagsklasserna Integer eller Double. Exempel: Koden skriver ArrayList<Integer> numbers = new ArrayList<Integer>(); for (int i = 0; i<=10; i++) { numbers.add(new Integer(i-5)); System.out.println(numbers); [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

(14 februari 2019 F5 16 ) Omslagsklasser: Hantering av objekten Integer io = numbers.get(7); System.out.println("Integer: " + io); int i = io.intvalue(); System.out.println("int : " + i ); Integer: 2 int : 2 Fast det är i själva verket enklare Java gör det automatiskt!

(14 februari 2019 F5 17 ) Omslagsklasser: Autoboxing och autounboxing numbers.clear(); for (int i = 0; i<10; i++) { numbers.add(10-i); System.out.println(numbers); [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] int s = 0; for (int i = 0; i<numbers.size(); i++) { s = s + numbers.get(i); System.out.println("Summan: " + s); Summan: 55 eller, ännu enklare med for-each -loop: for (int x : numbers) { s += x; System.out.println("Summan: " + s);

(14 februari 2019 F5 18 ) Att fundera på Vad tas bort av satsen numbers.remove(3); Är det element på plats 3 eller elementet som innehåller 3? Hur gör man för att få den variant som det inte är? Det är parameterns datatyp som avgör dvs numbers.remove(3); tar bort element på plats 3 medan numbers.remove(new Integer(3)); tar bort första element med värde 3.

(14 februari 2019 F5 19 ) Exempel: Beräkna medianen i Measurements Medianen är det värde som är större än hälften och mindre än hälften av alla element. Exempel: Medianen av talen 3, 7, 1, 2, 9, 4, 5 är 4. Vid ett jämnt antal kan man ta det ena av de två mittersta. Ett uppenbart sätt att beräkna medianen är således att sortera värdena och se vilket som kommer i mitten. Vi vill naturligtvis inte störa ordningen mellan de lagrade värdena så lösningen blir att kopiera över dem till en annan array eller arraylist. Vi ska använda en arraylist.

(14 februari 2019 F5 20 ) Ex: Inlägg i en sorterad arraylist Antag att al är en arraylista med heltal sorterade i stigande ordning. Antag att värdet i x ska läggas in i al så att sorteringen bibehålls. int index = 0; while (x > al.get(index)) { index++; al.add(index, x); index ska ange platsen för x Leta från vänster (index 0) efter första värde större än x Lägg in x Exempel: al.add(3, 5) < 5 5 < 5 1 2 4 6 7 9 1 2 4 5 6 7 9 0 1 2 3 4 5 0 1 2 3 4 5 6

(14 februari 2019 F5 21 ) Ex: Inlägg i sorterad arraylist, forts Vilka specialfall behövs? Inlägg i första position? Inlägg som sista element? Inlägg i en helt tom lista? int index = 0; while (x > al.get(index)) { index++; al.add(index, x); Första position Inget problem! Sista element Problem om x är större än alla lagrade värden! Helt tom lista Samma fall som sista element.

(14 februari 2019 F5 22 ) Ex: Inlägg i sorterad arraylist, forts Om x är större än alla lagrade värden (eller om listan är tom) så ger denna kod ett ArrayIndexOutOfBoundsException int index = 0; while (x > al.get(index)) { index++; al.add(index, x); Måste kontrollera att index < al.size() innan vi gör al.get(index)! int index = 0; while (index < al.size() && x > al.get(index)) { index++; al.add(index, x); När loopen terminerar kommer index ange platsen för det nya elementet oavsett om det bland de redan lagrade eller efter det sista av de lagrade. OBS: Ordningen i loopvillkoret är väsentlig!

(14 februari 2019 F5 23 ) Ex: Sortering med hjälp av inläggningsalgoritmen Nu var det inte ett värde som skulle läggas in utan alla använda i instansvarabeln values (counter stycken). ArrayList<Double> al = new ArrayList<Double>(); for (int i=0; i<this.counter; i++) { x = this.values[i]; int index = 0; while (index < al.size() && x > al.get(index)) { index++; al.add(index, x);

(14 februari 2019 F5 24 ) Exempel: Illustration i: values: 0 8 1 4 2 2 3 4 5 6 7 1 9 5 i : 0 1 2 3 4 5 8 4 2 7 1 9 6 5 al: index: 2 0 4 1 8 2 2 4 7 8 index : 0 1 2 3 i: values: 0 1 2 3 4 8 4 2 7 1 9 5 5 6 i : 0 1 2 3 4 5 6 8 4 2 7 1 9 5 al: 2 4 7 8 index: 0 1 2 3 index : 1 2 4 7 8 0 1 2 3 4 i: values: 0 1 2 3 4 5 8 4 2 7 1 9 5 6 i : 0 1 2 3 4 5 8 4 2 7 1 9 5 6 al: index: 1 2 4 7 8 0 1 2 3 4 5 index : 1 2 4 7 8 9 0 1 2 3 4 5

(14 februari 2019 F5 25 ) Slutligen en median-metod public double median() { ArrayList<Double> al = new ArrayList<Double>(); for (int i=0; i<this.counter; i++) { x = this.values[i]; int index = 0; while (index < al.size() && x > al.get(index)) { index++; al.add(index, x); return al.get(al.size()/2);

Mer om datatypen String (14 februari 2019 F5 26 )

(14 februari 2019 F5 27 ) Jämförelse av strängar Låt s och t vara referenser till två String-objekt. s.equals(t) returnerar true om strängarna är lika långa och innehåller samma tecken false i annat fall Exempel på användning: if (answer.equals("yes")) {... while (!p.getname().equals(q.getname())) {... Använd aldrig operatorn == för att testa om två strängar är lika!

(14 februari 2019 F5 28 ) Jämförelse av strängar Anropet s.compareto(t) returnerar ett negativt heltal om s kommer före t i alfabetisk ordning, noll om s och t innehåller samma tecken (dvs om s.equals(t) är true) och ett positivt heltal om s kommer efter t i alfabetisk ordning Observera: alfabetisk ordning betyder här i ordning efter ascii-koder (egentligen unikoder)

(14 februari 2019 F5 29 ) Exempel Klassen StringList: Ska läsa strängar ( ord ) från en datafil. Ska lagras i bokstavsordning i ett ArrayList-objekt. Ett ord ska bara lagras en gång. Klassen kommer använda instickssortering i en arraylist enligt tidigare exempel. Se minilektionen om algoritmer för mer detaljerad diskussion om hur instickssortering fungerar. Klassen kommer också visa hur man kan läsa från en fil.

(14 februari 2019 F5 30 ) Exempelklassen StringList import java.util.arraylist; import java.util.scanner; import java.io.*; public class StringList { private ArrayList<String> thelist; public StringList() { thelist = new ArrayList<String>();

(14 februari 2019 F5 31 ) Exempelklassen StringList: add Lägger in ett ord i listan så att sorteringen bibehålls. public void add(string str) { int i=0; while( i < thelist.size() && str.compareto(thelist.get(i)) > 0 ) { i++; if ( i == thelist.size()!str.equals(thelist.get(i)) ) { //If not found thelist.add(i,str); Observera: Ordningen i såväl while- som if-villkoren!

(14 februari 2019 F5 32 ) Exempelklassen StringList /** * Reads a file and add the words to the list */ public void load(string filename) throws IOException { FileReader file = new FileReader(filename); Scanner fscan = new Scanner(file); while(fscan.hasnext()) { add(fscan.next().tolowercase()); Observera: FileReader throws IOException tolowercase()

(14 februari 2019 F5 33 ) Läsa filer med FileReader Filsystem byteström FileReader objekt Scanner object teckenström H e j d u g l a d e glade du Hej String object Mitt program som anropar next()

Exempelklassen StringList public String tostring() { return thelist.tostring(); public static void main(string[] a) throws IOException { StringList list = new StringList(); list.load("indata.txt"); System.out.println(list); Som ger utskriften [aldrig, av, blir, blott, bryt, bryts, brödet, bästa, dag, dagen, den, det, drömmen, där, elden, en, finns, full, färd, gryr, gång, hast, i, man, men, mening, mätta, mål, målet, mödan, nattlång, nog, nya, och, oändligt, på, rast, som, sover, stora, ställen, störst, sång, sömnen, trygg, tänds, törst, upp, vägen, värd, vår, vårt, är, äventyr] Länk till klassen StringList (14 februari 2019 F5 34 )

(14 februari 2019 F5 35 ) Illustration av världen StringList objekt thelist Strängobjekt aldrig av blir blott list ArrayList objekt

Metoden equals För att jämföra objekt ur en egen klass (säg klassen Dice) så skriver man metoderna public boolean equals(dice d) { return this.getvalue() == d.getvalue(); Ska man jämföra antalet sidor också? Dvs så här: public boolean equals(dice d) { return this.getvalue() == d.getvalue() && this.nsides == d.nsides; Metoden equals finns alltid (definieras i basklassen Objekt) men den gör knappast vad man vill. (Hur skulle den kunna det?) (14 februari 2019 F5 36 )

(14 februari 2019 F5 37 ) Metoden compareto i andra klasser För att ordna objekt ur en egen klass (säg klassen Dice) så skriver man public int compareto(dice d) { return this.getvalue() - d.getvalue(); Eller är det antalet sidor som definierar ordning? Dvs så här: public boolean equals(dice d) { return this.nsides - d.nsides; Alla inbyggda klasser använder dessa två metoder (equals och compareto) för att jämföra objekt.

(14 februari 2019 F5 38 ) Exempelklasserna Word och WordList Samma problem som i exemplet StringList men vi vill också veta hur många gånger varje ord förekommit. Varje ord måste förses men en frekvensräknare. Gör en till klass: public class Word { private String theword; private int frequency; public Word(String theword) { this.theword = theword; this.frequency = 1; public String tostring() { return theword + " : " + frequency;

(14 februari 2019 F5 39 ) Exempelklassen Word public void increasefrequency() { frequency++; public String getword() { return theword; public int getfrequency() { return frequency;

(14 februari 2019 F5 40 ) Exempelklassen Word public boolean equals(word w) { return theword.equals(w.theword); public int compareto(word w) { return theword.compareto(w.theword); // End of class Word

(14 februari 2019 F5 41 ) Exempelklassen WordList Klassen WordList blir mycket lik klassen StringList: import java.util.arraylist; import java.util.scanner; import java.io.*; public class WordList { private ArrayList<Word> thelist; public WordList() { thelist = new ArrayList<Word>();

(14 februari 2019 F5 42 ) Exempelklassen WordList public void add(word word) { int i=0; while( i<thelist.size() && word.compareto(thelist.get(i))>0) { i++; if (i==thelist.size() word.compareto(thelist.get(i))!=0 ) { thelist.add(i,word); else { thelist.get(i).increasefrequency();

(14 februari 2019 F5 43 ) Exempelklassen WordList public void load(string filename) throws IOException { FileReader file = new FileReader(filename); Scanner fscan = new Scanner(file); while(fscan.hasnext()) { add(new Word(fscan.next().toLowerCase())); public String tostring() { return thelist.tostring(); Observera att arralylistens tostring kommer att använda sig av tostring i klassen Word.

Exempelklassen WordList public void print() { int i= 0; for (Word w : thelist) { i++; System.out.format("%12s :%2d", w.getword(), w.getfrequency()); if (i % 5 == 0) { System.out.println(); System.out.println(); Exempel på output: aldrig : 1 av : 2 blir : 1 blott : 1 bryt : 2 bryts : 1 brödet : 1 bästa : 2 dag : 1 dagen : 3 den : 4 det : 3 drömmen : 1 där : 2 elden : 1 en : 3 finns : 1 full : 1 färd : 1 gryr : 1 gång : 1 hast : 1 i : 2 man : 1 men : 1 mening : 1 mätta : 1 mål : 1 målet : 1 mödan : 1 nattlång : 1 nog : 1 nya : 1 och : 3 oändligt : 1 (14 februari 2019 F5 44 )

(14 februari 2019 F5 45 ) Illustration av världen StringList objekt thelist Word objekt 1 Strängobjekt aldrig 1 2 1 av blir blott list ArrayList objekt

(14 februari 2019 F5 46 ) Sortering av ordlistan i frekvensordning public void printfrequencyordered() { // Construct a frequency ordered list ArrayList<Word> fsorted = new ArrayList<Word>(); for (Word w : thelist) { int i=0; while(i < fsorted.size() && w.getfrequency() < fsorted.get(i).getfrequency()) { i++; fsorted.add(i, w); // and print it... (Se minilektionen om algoritmer för detaljer!)

(14 februari 2019 F5 47 ) Sortering av ordlistan i frekvensordning // and print it... int i = 0; for (Word w : fsorted) { i++; System.out.format("%3d if (i%5 == 0) { System.out.println(); System.out.println(); %-11s", w.getfrequency(), w.getword());

(14 februari 2019 F5 48 ) Exempelklassen WordList Exempel på utskrift: 6 är 4 den 3 och 3 en 3 det 3 dagen 2 upp 2 i 2 där 2 bästa 2 bryt 2 av 1 äventyr 1 vårt 1 vår 1 värd 1 vägen 1 törst 1 tänds 1 trygg 1 sömnen 1 sång 1 störst 1 ställen 1 stora 1 sover 1 som 1 rast 1 på 1 oändligt 1 nya 1 nog 1 nattlång 1 mödan 1 målet 1 mål 1 mätta 1 mening 1 men 1 man 1 hast 1 gång 1 gryr 1 färd 1 full 1 finns 1 elden 1 drömmen 1 dag 1 brödet 1 bryts 1 blott 1 blir 1 aldrig Länk till katalog med kod och data

(14 februari 2019 F5 49 ) Tips för lektion 9 1. Sista exemplet i minilektionen om Scanner-klassen beskriver hur man läser raderna i en fil. 2. Metoderna next, nextint, nextdouble,... läser förbi s k white space (dvs blanktecken, tabtecken och radbyten) framför ordet (talet) men inte efter ordet (talet). Det innebär att om ett tal läses från en rad så ger nästa nextline slutet på samma rad och inte raden efter det som talet stor på. 3. Följ instruktionerna (som säger spara som) när ni hämtar indatafilen persons.xxx. Copy-paste kan ge felaktiga radslut. 4. Indatafilen persons finns med olika teckenkodningar. Troligen bäst att använda utf-8 men du kan prova den som är anpassad till ditt system!