Redovisningarna denna vecka

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

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

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

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

Tentamen OOP

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

Objektorienterad programmering i Java

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.

OOP Objekt-orienterad programmering

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

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

Del A (obligatorisk för alla)

Tentamen, EDAA20/EDA501 Programmering

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Hur ser ett Java-program ut?

Föreläsning 1 & 2 INTRODUKTION

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

Du ska nu skapa ett litet program som skriver ut Hello World.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Objekt-orienterad programmering

Klasser och objekt i C#

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

Språkkonventioner och redigering av tal.

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

Lathund, procent med bråk, åk 8

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

SMD 134 Objektorienterad programmering

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

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

Träning i bevisföring

Lektion 1, del b Utskrifter av variabelvärden Inläsning av värden till variabler

Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen

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 på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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)

Objektorienterad programmering D2

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen i Programmering grundkurs och Programmering C

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

Programexempel: tärningsspel

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

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

TENTAMEN OOP

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

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

Objektorienterad Programmering (TDDC77)

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

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

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

Tentamen i Objektorienterad programmering

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

Två konstiga klockor

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

Utveckla arbetsmiljö och verksamhet genom samverkan

Laboration A Objektsamlingar

DELPROV 1 I DATAVETENSKAP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Programmera en NXT Robot

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 vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreningen Nordens lokala hemsidor

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Redovisning av inlämningsuppgifter

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

Snabbslumpade uppgifter från flera moment.

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

Vi skall skriva uppsats

Kampanj kommer från det franska ordet campagne och innebär att man under en tidsbegränsad period bedriver en viss verksamhet.

Föreläsning 5: Rekursion

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

VÄRDERINGSÖVNINGAR. Vad är Svenskt?

Del A (obligatorisk för alla)

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

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 )

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

Tentamen , Introduktion till Java, dtaa98, dtea53

Distribuerade system. CORBA eller RMI

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.

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

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

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Presentation av trafiksimuleringsprojektet

Transkript:

(23 februari 2015 F2.1 ) Redovisningarna denna vecka På torsdag eftermiddag och fredag prioriterar vi redovisningar av lektion 9. Ni kan bara gå på det tillfälle ni har schemalagt! Ni som går enstaka kurs kan komma F2s tider Ett reservpass för alla: fredag kl 15 17 i 2510 Redovisa gärna under perioden tisdag torsdag fm!

(23 februari 2015 F2.2 ) Dagens text Förra gången Något om sortering Lite mer om strängar Program med flera klasser Läsning från och skrivning på filer

(23 februari 2015 F2.3 ) Förra gången ArrayList som arrayer men annan syntax dynamisk metoder som add(e), add(index, e), set(index,e), get(index) endast objektreferenser Omslagsklasser Metoden format som klassmetod i klassen String som instansmetod i PrintStream (som System.out är) Klassen Scanner som delar upp en ström tokens (ord, tal,... )

(23 februari 2015 F2.4 ) Exempel: Klassen SortedMeasurements Antag att vi i klassen Measurements vill ha en metod som returnerar medianen av de lagrade värdena samt att det inte spelar någon roll i vilken ordning värdena lagras. Anmärkning: Metoden smooth blir antagligen meningslös Vi ska använda en ArrayList i stället för en en array.

(23 februari 2015 F2.5 ) Klassen SortedMeasurements /** * Demonstrates how to keep the elements in * an arraylist sorted. */ import java.util.arraylist; public class SortedMeasurements { private ArrayList<Double> thevalues; public SortedMeasurements() { thevalues = new ArrayList<Double>(); Observera att vi behöver inte längre hålla reda på antalet element Kom ihåg Double i stället för double

(23 februari 2015 F2.6 ) Klassen SortedMeasurements /** Adds a value to the arraylist keeping it sorted */ public void add(double value) { int i=0; while (i<thevalues.size() && value >= thevalues.get(i)) { i++; thevalues.add(i, value); Observera: 1. Metoden förutsätter att redan lagrade värden är sorterade (vilket de är om den här add-metoden används hela tiden) 2. Ordningen på de två villkoren i while-satsen. Det går inte att skriva while (value >= thevalues.get(i) && i<thevalues.size() ) {

Klassen SortedMeasurements /** Returns the median of the stored elements */ public double median() { int n = thevalues.size(); if (thevalues.size()==0) { // if no elements return Double.NaN; else if (n%2==1) { // if odd number return thevalues.get(n/2); else { // if even number return (thevalues.get(n/2-1) + thevalues.get(n/2))/2.; Observera: 1. Konstanten Double.NaN 2. Medianen vid ett jämnt antal element kan definieras ibland som ett av de två mittersta elementen. (23 februari 2015 F2.7 )

(23 februari 2015 F2.8 ) Klassen SortedMeasurements public String tostring() { return thevalues.tostring(); public static void main(string[] args) { SortedMeasurements m = new SortedMeasurements(); for (int i=0; i<5; i++) { m.add(math.random()); System.out.println("Output using tostring() :\n" + m + "\n"); Ger utskriften Output using tostring() : [0.34445594204264907, 0.34957658659203494, 0.43230426828775326, 0.543590112

(23 februari 2015 F2.9 ) Klassen SortedMeasurements Snyggare utskrift med public void print() { for(int i=0; i<thevalues.size(); i++) { System.out.format("%6.2f", thevalues.get(i)); if (i%10==9) { System.out.println(); Med 20 lagrade värden kan utskriften se ut på detta sätt: 0,03 0,04 0,06 0,08 0,12 0,15 0,23 0,25 0,37 0,41 0,42 0,46 0,55 0,56 0,62 0,64 0,68 0,70 0,80 0,84 Hoppsan! Decimalkomma?

(23 februari 2015 F2.10 ) Klassen SortedMeasurements Kan använda java.util.locale (importeras) i formatsatsen: public void print() { for(int i=0; i<thevalues.size(); i++) { System.out.format(Locale.US, "%6.2f", thevalues.get(i)); if (i%10==9) { System.out.println(); 0.00 0.07 0.13 0.17 0.23 0.28 0.32 0.38 0.43 0.50 0.51 0.54 0.60 0.67 0.70 0.71 0.72 0.82 0.83 0.91 Svensk standard erhålls med System.out.format(new Locale( sv, SE ), %6.2f, thevalues.get(i));

(23 februari 2015 F2.11 ) Klassen SortedMeasurements Man kan även redigera texten i en tostring-metod: public String tostring() { String res = ""; for (double x: thevalues) { res = res + String.format(Locale.US, "%6.2f", x); return res; som skulle kunna ge strängen 0.00 0.07 0.13 0.17 0.23 0.28 0.32 0.38 0.43 0.50 0.51 0.54 0 Observera att format här är en klassmetod i klassen String Länk till klassen SortedMeasurements

(23 februari 2015 F2.12 ) 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! DrJava

(23 februari 2015 F2.13 ) 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)

(23 februari 2015 F2.14 ) Exempelklassen StringList Klassen en underhåller en lista med strängar ( ord ) i bokstavsordning. import java.util.arraylist; import java.util.scanner; import java.io.*; public class StringList { private ArrayList<String> thelist; public StringList() { thelist = new ArrayList<String>();

(23 februari 2015 F2.15 ) Exempelklassen StringList public void add(string str) { int i=0; while( i<thelist.size() && str.compareto(thelist.get(i))>0) { i++; if (i==thelist.size() str.compareto(thelist.get(i))!=0 ) { // If not found thelist.add(i,str); Observera: Varje ord lagras bara en gång Ordningen i såväl while- som if-villkoren

(23 februari 2015 F2.16 ) Exempelklassen StringList /** * Reads a file and add the words to the list */ public void load(string filename) throws IOException { FileInputStream file = new FileInputStream(filename); Scanner fscan = new Scanner(file); while(fscan.hasnext()) { add(fscan.next().tolowercase()); Observera: FileInputStream throws IOException tolowercase() Lite annorlunda än den tidigare beskrivning

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âl, mâlet, m?dan, m?tta, nattlâng, nog, nya, och, o?ndligt, pâ, rast, som, sover, stora, st?rst, st?llen, sâng, s?mnen, trygg, t?rst, t?nds, upp, vâr, vârt, v?gen, v?rd,?r,?ventyr] Öhhh? (23 februari 2015 F2.17 )

(23 februari 2015 F2.18 ) Exempelklassen StringList /** * Reads a file and add the words to the list */ public void load(string filename) throws IOException { FileInputStream instream = new FileInputStream(filename); Scanner fscan = new Scanner(instream, "ISO-8859-1"); while(fscan.hasnext()) { add(fscan.next().tolowercase()); [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]

(23 februari 2015 F2.19 ) 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 (defineras i basklassen Objekt) men den gör knappast vad man vill. (Hur skulle den kunna det?)

(23 februari 2015 F2.20 ) 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;

(23 februari 2015 F2.21 ) Exempelklassen Word public void increasefrequency() { frequency++; public String getword() { return theword; public int getfrequency() { return frequency;

(23 februari 2015 F2.22 ) 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 Länk till klassen Word

(23 februari 2015 F2.23 ) 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; //<<< Word instead of String public WordList() { thelist = new ArrayList<Word>();

(23 februari 2015 F2.24 ) Exempelklassen WordList public void add(word word) { //<<< Word instead of String 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(); //<<< Count frequency

(23 februari 2015 F2.25 ) Exempelklassen WordList public void load(string filename) throws IOException { FileInputStream file = new FileInputStream(filename, "ISO-8859-1"); Scanner fscan = new Scanner(file); while(fscan.hasnext()) { add(new Word(fscan.next().toLowerCase())); public String tostring() { return thelist.tostring();

aldrig : 1 av : 2 blir : 1 blott : 1 bryt : 2 bryts : 1 brödet : 1 bästa : 2 dag : 1 dagen : 3 (23 februari 2015 F2.26 ) Exempelklassen WordList public void print() { for (Word w : thelist) { System.out.format("%12s : %4d\n", w.getword(), w.getfrequency()); Exempel på output:

(23 februari 2015 F2.27 ) Exempelklassen WordList /** * Demonstrates a insertion sort using an arraylist */ public void printfrequencyordered() { 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); for (Word w : fsorted) { System.out.format("%3d %s\n", w.getfrequency(), w.getword());

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 (23 februari 2015 F2.28 ) Exempelklassen WordList Exempel på utskrift:

(23 februari 2015 F2.29 ) 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!

(23 februari 2015 F2.30 ) 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);

(23 februari 2015 F2.31 ) 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!

(23 februari 2015 F2.32 ) Tips för lektion 9 1. 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å. 2. Följ instruktionerna (som säger spara som) när ni hämtar indatafilen persons.txt. Copy-paste kan ge felaktiga radslut. 3. Filen persons.txt är kodad i ISO-8859-1 (Latin 1). Om ni kör på ett system som inte har det som default måste ni ange det när ni skapar Scanner-objektet.