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

Relevanta dokument
Dagens föreläsning. Instickssortering med hjälp av en ArrayList. Omslagsklasser. Metoderna equals och compareto. Läsa filer. 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

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

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

Del A (obligatorisk för alla)

Repetition av OOP- och Javabegrepp

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

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

Repetition av OOP- och Javabegrepp

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Objektorienterad programmering i Java

Tentamen, EDAA20/EDA501 Programmering

Del A (obligatorisk för alla)

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

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

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.

Det finns en referensbok (Java) hos tentavakten 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..

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

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

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

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 10. ADT:er och datastrukturer

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

Del A (obligatorisk för alla)

Arrayer. results

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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-4 Innehåll

Föreläsning REPETITION & EXTENTA

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

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

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.

DAT043 - föreläsning 8

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Laboration A Objektsamlingar

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

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

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

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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 )

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

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

Presentation av trafiksimuleringsprojektet

Föreläsnings 9 - Exceptions, I/O

Input. Programmering. Andra källor

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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.

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

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

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

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Föreläsning 14. Filhantering

TENTAMEN OOP

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Länkade strukturer, parametriserade typer och undantag

Objektorienterad Programmering (TDDC77)

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

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.

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

JAVAUTVECKLING LEKTION 7

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

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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 8. Klassen String Mer om fält Klassen ArrayList

OOP Objekt-orienterad programmering

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

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

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.

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

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Transkript:

(12 februari 2018 F5 1 ) Dagens föreläsning Scanner-repetition ArrayList Omslagsklasser Metoderna equals och compareto Läsa filer Programs hantering av fel.

(12 februari 2018 F5 2 ) Scanner-repetition Ett Scanner-objekt klumpar ihop tecken större enheter som heltal, flyttal och strängar:

(12 februari 2018 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()

(12 februari 2018 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()

(12 februari 2018 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()

Arrayers styrkor och svagheter (12 februari 2018 F5 5 )

(12 februari 2018 F5 5 ) Arrayers styrkor och svagheter + Effektivt minnesutnyttjande

(12 februari 2018 F5 5 ) Arrayers styrkor och svagheter + Effektivt minnesutnyttjande + Snabb åtkomst till element med visst index

(12 februari 2018 F5 5 ) 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)

(12 februari 2018 F5 5 ) 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

(12 februari 2018 F5 5 ) 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

(12 februari 2018 F5 6 ) Ett alternativ till arrayer: ArrayList En ArrayList är en arrayliknande struktur med följande egenskaper:

(12 februari 2018 F5 6 ) Ett alternativ till arrayer: ArrayList En ArrayList är en arrayliknande struktur med följande egenskaper: Kan växa och krympa automatiskt

(12 februari 2018 F5 6 ) 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

(12 februari 2018 F5 6 ) 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

(12 februari 2018 F5 6 ) 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

(12 februari 2018 F5 6 ) 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

Exempel ArrayList (12 februari 2018 F5 7 )

(12 februari 2018 F5 7 ) Exempel ArrayList import java.util.arraylist; Måste importeras

(12 februari 2018 F5 7 ) Exempel ArrayList import java.util.arraylist; ArrayList<String> names; Måste importeras Typen måste anges i deklarationen

(12 februari 2018 F5 7 ) 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

(12 februari 2018 F5 7 ) 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

(12 februari 2018 F5 7 ) 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

(12 februari 2018 F5 8 ) Exempel ArrayList Der går att skjuta in, ändra och ta bort element.

(12 februari 2018 F5 8 ) Exempel ArrayList Der går att skjuta in, ändra och ta bort element. Exempel: names.add(1, "Anna"); System.out.println(names); [Olle, Anna, Lisa, Lasse]

(12 februari 2018 F5 8 ) 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]

(12 februari 2018 F5 8 ) 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]

(12 februari 2018 F5 9 ) 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[]>();

(12 februari 2018 F5 10 ) 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.

(12 februari 2018 F5 11 ) ArrayList ArrayList-objekt är implementerade med arrayer. Det innebär, t ex att operationen add och remove kan flytta på element.

(12 februari 2018 F5 11 ) 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);

(12 februari 2018 F5 11 ) 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

(12 februari 2018 F5 11 ) 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);

(12 februari 2018 F5 12 ) Omslagsklasser Hur gör man för att lagra t ex int eller double?

(12 februari 2018 F5 12 ) Omslagsklasser Hur gör man för att lagra t ex int eller double? Man använder omslagsklasserna Integer eller Double.

(12 februari 2018 F5 12 ) 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]

(12 februari 2018 F5 13 ) 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

(12 februari 2018 F5 13 ) 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!

(12 februari 2018 F5 14 ) 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]

(12 februari 2018 F5 14 ) 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

(12 februari 2018 F5 14 ) 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);

(12 februari 2018 F5 15 ) 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?

(12 februari 2018 F5 15 ) 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.

(12 februari 2018 F5 16 ) 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

(12 februari 2018 F5 16 ) 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())) {...

(12 februari 2018 F5 16 ) 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!

(12 februari 2018 F5 17 ) 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)

(12 februari 2018 F5 18 ) 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 illustrera instickssortering i en arraylist. 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.

Exempelklassen StringList (12 februari 2018 F5 19 )

(12 februari 2018 F5 19 ) 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>();

(12 februari 2018 F5 20 ) Exempelklassen StringList: add Lägger in ett ord i listan så att sorteringen bibehålls.

(12 februari 2018 F5 20 ) Exempelklassen StringList: add Lägger in ett ord i listan så att sorteringen bibehålls.

(12 februari 2018 F5 20 ) 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);

(12 februari 2018 F5 20 ) 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!

(12 februari 2018 F5 21 ) 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());

(12 februari 2018 F5 21 ) 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:

(12 februari 2018 F5 21 ) 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

(12 februari 2018 F5 21 ) 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

(12 februari 2018 F5 21 ) 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()

(12 februari 2018 F5 22 ) 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()

(12 februari 2018 F5 23 ) 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);

(12 februari 2018 F5 23 ) 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

(12 februari 2018 F5 24 ) Illustration av världen Strängobjekt StringList objekt thelist aldrig av blir blott list main metoden ArrayList objekt

(12 februari 2018 F5 25 ) Metoderna equals och compareto i andra klasser För att jämföra objekt ur en egen klass (säg klassen Dice) så skriver man metoderna boolean equals(dice d) om man vill se om två objekt är lika int compareto(dice d) om man vill kunna ordna objekten i storleksordning Alla inbyggda klasser i Java som behöver jämföra objekt använder just dessa namn. Metoden equals finns alltid (definieras i basklassen Objekt) men den gör knappast vad man vill. (Hur skulle den kunna det?)

(12 februari 2018 F5 26 ) Exempelklasserna Word och WordList Samma problem som i exemplet StringList men vi vill också veta hur många gånger varje ord förekommit.

(12 februari 2018 F5 26 ) 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:

(12 februari 2018 F5 26 ) 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;

(12 februari 2018 F5 27 ) Exempelklassen Word public void increasefrequency() { frequency++;

(12 februari 2018 F5 27 ) Exempelklassen Word public void increasefrequency() { frequency++; public String getword() { return theword;

(12 februari 2018 F5 27 ) Exempelklassen Word public void increasefrequency() { frequency++; public String getword() { return theword; public int getfrequency() { return frequency;

(12 februari 2018 F5 28 ) Exempelklassen Word public boolean equals(word w) { return theword.equals(w.theword);

(12 februari 2018 F5 28 ) 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

(12 februari 2018 F5 29 ) 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>();

(12 februari 2018 F5 30 ) 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();

(12 februari 2018 F5 31 ) 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()));

(12 februari 2018 F5 31 ) 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 på : 1 rast : 1 som : 1 sover : 1 stora : 1 ställen : 1 störst : 1 sång : 1 sömnen : 1 (12 februari trygg 2018 : 1F5 32 )

(12 februari 2018 F5 33 ) Illustration av världen StringList objekt thelist Word objekt 1 Strängobjekt aldrig list 1 2 1 av blir blott main metoden ArrayList objekt

(12 februari 2018 F5 34 ) 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...

(12 februari 2018 F5 34 ) 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!)

(12 februari 2018 F5 35 ) 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());

(12 februari 2018 F5 36 ) 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

(12 februari 2018 F5 37 ) Ytterligare något om strängar String-objekt är konstanta kan ej förändras. Kan alltså riskfritt delas mellan objekt

(12 februari 2018 F5 37 ) Ytterligare något om strängar String-objekt är konstanta kan ej förändras. Kan alltså riskfritt delas mellan objekt Klassen StringBuffer kan också användas för att representera stängar men dessa kan ändra både till längd och innehåll. Bra alternativ om långa strängar ska byggas upp i en loop (t ex i tostring-metoder).

(12 februari 2018 F5 37 ) Ytterligare något om strängar String-objekt är konstanta kan ej förändras. Kan alltså riskfritt delas mellan objekt Klassen StringBuffer kan också användas för att representera stängar men dessa kan ändra både till längd och innehåll. Bra alternativ om långa strängar ska byggas upp i en loop (t ex i tostring-metoder). Det finns en stor mängd metoder för att hantera strängar. Se javadokumentationen!

(12 februari 2018 F5 38 ) Konverteringar från tal till String Några olika sätt: Genom konkatenering med en sträng. Exempel: int x = 12; String s = "" + x;

(12 februari 2018 F5 38 ) Konverteringar från tal till String Några olika sätt: Genom konkatenering med en sträng. Exempel: int x = 12; String s = "" + x; Med hjälp av metoden String.valueOf(x) där x är av någon primitiv datatyp.

(12 februari 2018 F5 38 ) Konverteringar från tal till String Några olika sätt: Genom konkatenering med en sträng. Exempel: int x = 12; String s = "" + x; Med hjälp av metoden String.valueOf(x) där x är av någon primitiv datatyp. Med metoden String.format. Exempel: String s = String.format("%5.2f \t %9.6f \t %12d", Math.PI, Math.E, 42);

(12 februari 2018 F5 39 ) Konvertering från String till tal Kan (bl a) göras med hjälp av parsemetoderna i omslagsklasserna. Exempel: double d = Double.parseDouble("2.5"); Kan naturligtvis bli fel

(12 februari 2018 F5 39 ) Konvertering från String till tal Kan (bl a) göras med hjälp av parsemetoderna i omslagsklasserna. Exempel: double d = Double.parseDouble("2.5"); Kan naturligtvis bli fel Kan också göras med klassen Scanner. Exempel: Scanner sc = new Scanner("13 3.5 12"); sc.uselocale(locale.us); System.out.println(sc.nextInt()); // Skriver 13 System.out.println(sc.nextDouble()); // Skriver 3.5 System.out.println(sc.nextInt()); // Skriver 12

(12 februari 2018 F5 39 ) Konvertering från String till tal Kan (bl a) göras med hjälp av parsemetoderna i omslagsklasserna. Exempel: double d = Double.parseDouble("2.5"); Kan naturligtvis bli fel Kan också göras med klassen Scanner. Exempel: Scanner sc = new Scanner("13 3.5 12"); sc.uselocale(locale.us); System.out.println(sc.nextInt()); // Skriver 13 System.out.println(sc.nextDouble()); // Skriver 3.5 System.out.println(sc.nextInt()); // Skriver 12 Finns stort antal andra klasser som kan användas för detta ändamål!

(12 februari 2018 F5 40 ) Programs hantering av fel Vad ska koden göra om den får en omöjlig uppgift?

(12 februari 2018 F5 40 ) Programs hantering av fel Vad ska koden göra om den får en omöjlig uppgift? Exempel: public class Measurements { private double[] storage; private int stored; public Measurements(int max) { thearray = new double(max);...

(12 februari 2018 F5 40 ) Programs hantering av fel Vad ska koden göra om den får en omöjlig uppgift? Exempel: public class Measurements { private double[] storage; private int stored; Vad händer nu om vi gör public Measurements(int max) { thearray = new double(max);... Measurements m = new Measurements(n); där n råkar vara negativt eller 0? DrJava

(12 februari 2018 F5 41 ) Programs hantering av fel Vi får alltså ett avbrott med felutskrift vilket är bra. Programmet skulle kunna fixa felet genom att inte bry sig om storleken om den är illegal och sätta någon legal storlek.

(12 februari 2018 F5 41 ) Programs hantering av fel Vi får alltså ett avbrott med felutskrift vilket är bra. Programmet skulle kunna fixa felet genom att inte bry sig om storleken om den är illegal och sätta någon legal storlek. Till exempel: public Measurements(int max) { if (max <= 0) { max = 10; thearray = new double(max);

(12 februari 2018 F5 41 ) Programs hantering av fel Vi får alltså ett avbrott med felutskrift vilket är bra. Programmet skulle kunna fixa felet genom att inte bry sig om storleken om den är illegal och sätta någon legal storlek. Till exempel: public Measurements(int max) { if (max <= 0) { max = 10; thearray = new double(max); Är det bra att göra så?

Är det bra att låta konstruktorn fixa felet? (12 februari 2018 F5 42 )

(12 februari 2018 F5 42 ) Är det bra att låta konstruktorn fixa felet? Inte självklart! Att skicka in ett omöjligt värde i konstruktorn tyder antingen på att man är helt ute och cyklar eller att man har en variabel som man tror innehåller något men som egentligen innehåller något annat. Om man låter koden fixa felet bör man åtminstone ge en varningsutskrift!

(12 februari 2018 F5 43 ) Värre fel! Fel som resulterar i felaktigt utan felmeddelande!

(12 februari 2018 F5 43 ) Värre fel! Fel som resulterar i felaktigt utan felmeddelande! Metoden get: public double get(int index) { return storage[index];

(12 februari 2018 F5 43 ) Värre fel! Fel som resulterar i felaktigt utan felmeddelande! Metoden get: public double get(int index) { return storage[index]; Om man anropar med ett negativt värde eller ett värde större än storage.length så får man ett avbrott men om man anropar met ett värde större än eller lika med stored och mindre än storage.length så får man inget felmeddelande utan bara ett felaktigt resultat (troligen 0).

Hur ska programmet slå larm i ett sådant fall? (12 februari 2018 F5 44 )

(12 februari 2018 F5 44 ) Hur ska programmet slå larm i ett sådant fall? Felutskrift: System.out.println("..."):

(12 februari 2018 F5 44 ) Hur ska programmet slå larm i ett sådant fall? Felutskrift: System.out.println("..."): använda assert: assert index < stored;

(12 februari 2018 F5 44 ) Hur ska programmet slå larm i ett sådant fall? Felutskrift: System.out.println("..."): använda assert: assert index < stored; kasta ett undantag if (index >= stored) { throw new RuntimeException("... ");

(12 februari 2018 F5 44 ) Hur ska programmet slå larm i ett sådant fall? Felutskrift: System.out.println("..."): använda assert: assert index < stored; kasta ett undantag if (index >= stored) { throw new RuntimeException("... "); Undantag är det mest generella sättet! Enligt specifikationerna ska ni utnyttja detta i både lektion 9 och 10. Läs lite mer om detta i lektion 8!

Tips för lektion 9 (12 februari 2018 F5 45 )

(12 februari 2018 F5 45 ) Tips för lektion 9 1. Sista exemplet i minilektionen om Scanner-klassen beskriver hur man läser raderna i en fil.

(12 februari 2018 F5 45 ) 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å.

(12 februari 2018 F5 45 ) 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.

(12 februari 2018 F5 45 ) 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. Välj den som passar ditt system!