Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Relevanta dokument
OOP Objekt-orienterad programmering

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

Instuderingsuppgifter läsvecka 2

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

DAT043 Objektorienterad Programmering

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

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

Lösningar för tenta 2 DAT043,

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Objektorienterad programmering i Java

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

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

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

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

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

Fördjupad Java. Undantagshantering. Fel

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

Generisk klass med typparameter Inre klass - ListIterator

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

JAVAUTVECKLING LEKTION 7

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Föreläsning 14. Filhantering

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

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

LÖSNINGSFÖRSLAG

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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 OOP

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

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

Laboration 13, Arrayer och objekt

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

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

JAVAUTVECKLING LEKTION 4

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

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

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

Lösningsförslag övning 2.

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

Del A (obligatorisk för alla)

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Kopiering av objekt i Java

Språkkonventioner och redigering av tal.

Föreläsning 4 Innehåll

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

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

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

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

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Arrayer. results

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Del A (obligatorisk för alla)

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

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

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

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

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

Föreläsning 3. Stack

Repetition av OOP- och Javabegrepp

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

TDDD78 Viktiga begrepp, del 2

1 Comparator & Comparable

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

Laboration 1 - Grunderna för OOP i Java

Transkript:

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR 1. 2. Om vi använder interfacet List behöver vi inte bry oss om den konkret implementation som används, därför kan implementationen bytas ut genom att endast ändra på ett enda ställe i koden. Depend upon abstractions, not upon concrete implementations. Deklarationen Set<String> stringset; är att föredra. Det finns två anledningar till detta: 1. vi erhåller ett kompileringsfel istället för få ett exekveringsfel om försöker lägga in något annat än en String i mängden stringset 2. vi behöver inte göra explicita typomvandlingar när vi hämtar element ur mängden stringset. 3. 4. 5. 6. Om man vill använda Collection-ramverkets sorteringshjälpmedel så måste man se till att alla objekt som ska sorteras implementerar gränssnittet Comparable vilket betyder att metoden compareto () som jämför två objekt av klassen måste finnas. public class Point implements Comparable{... public int compareto(point p) {... TreeSet<Double> myset = new TreeSet<Double>( ); myset.add( new Double(1.0) );... myset.add( new Double(0.5) ); Double d = myset.first(); Utskrift av alla elementen i listan med användning av en iterator: Iterator<String> iter = list.iterator(); while (iter.hasnext()) { String str = iter.next(); System.out.println(str); Utskrift av alla elementen i listan med användning av den förenklade for-satsen: for (String str : list) { System.out.println(str); Felen inträffar vi satserna: c = cigs.remove(0); respektive Cigarette c = cigs.get(i); Metoderna remove och get returnerar typen Object medan variabeln c i båda fallen är av typen Cigarette. Istället för att göra explicit typomvandling skall följande åtgärder göras: private ArrayList< Cigarette> cigs; public CigarettePack() { cigs = new ArrayList<Cigarette>(); TDA550 (HT16) 1 Lösningsförslag till instuderingsuppgifter 6

7. 8. 9. i. Ja - String implementerar Comparable ii. Nej - Set är inte en subtyp till List iii. Ja - ArrayList är en subtyp till List och String implementerar Comparable iv. Nej - Dog implementerar inte Comparable a) Kompileringsfel. lep kan t.ex vara av typen List<ColorPoint> och ett element av typen Point är ingen subtyp till ColorPoint. b) Kompileringsfel. lep kan t.ex vara av typen List<Point3D> och ett element av typen ColorPoint är ingen subtyp till Point3D. c) Kompileringsfel. lecp kan t.ex vara av typen List<SomeType>, där SomeType extends ColorPoint, och element av typen ColorPoint3D är ingen subtyp till SomeType. d) Ok. Listan lscp kan vara av typen List<ColorPoint>, List<Point> eller List<Object>. Typen ColorPoint är subtyp både till Point2D och Object. e) Ok! null har ingen specifik typ och kan läggas in oberoende av vilken typ som kan lagras i listan. f) Ok! Alla typer är sybtyp till typen Object. g) Ok! Listan lep kan vara av typen List<Point> eller List<SomeType>, där SomeType är en subtyp till Point. Således är Point supertyp till SomeType. h) Kompileringsfel. Listan lscp kan vara av typen List<ColorPoint>, List<Point> eller List<Object>. Typen ColorPoint är inte supertyp till Point2D och Object. i) Ok! lecp kan t.ex vara av typen List<SomeType>, där SomeType extends ColorPoint, och typen ColorPoint är supertyp till SomeType. j) Kompileringsfel. Listan lecp kan t.ex vara av typen List<SomeType>, där SomeType extends ColorPoint, och typen ColorPoint3D är inte supertyp till SomeType. a) b) public static ArrayList<String> bornthisyear(person[] people, int year) { for (int i = 0; i < people.length; i = i + 1) { if (people[i].getbirthyear() == year) result.add(people[i].getname()); public static ArrayList<String> bornthisyear(arraylist<person> people, int year) { for (Person p : people) { if (p.getbirthyear() == year) result.add(p.getname()); public static ArrayList<String> bornthisyear(arraylist<person> people, int year) { Iterator<Person> p = people.iterator(); while (p.hasnext()) { Person obj = p.next(); if (obj.getbirthyear() == year) result.add(obj.getname()); TDA550 (HT16) 2 Lösningsförslag till instuderingsuppgifter 6

10. 11. 12. c) public static void removenames(arraylist<person> people, ArrayList<String> names) { Iterator<String> n = names.iterator(); while (n.hasnext()) { String name = n.next(); Iterator<Person> p = people.iterator(); while (p.hasnext()) { if (p.next().getname() == name) p.remove(); Om ordningen som låtarna spelas i, är av betydelse, så är en lista det rätta valet. Om däremot ordningen inte har någon betydelse, men att samma låt inte får spelas flera gånger, så är en mängd rätta valet. Inre klasser använd då en klass behöver en "hjälpklass" som inte används utanför klassen eller då klassen behöver tillgång till den omslutande klassens attribut (representation) t.ex. en iterator. En statisk inre klass har inte access till instansvariabler i den yttre klassen. Lösningen är antingen att göra klassen Inner till en icke-statisk klass, eller att göra instansvariabeln str till en klassvariabel. public class Problem { private String str; private class Inner { private void testmethod() { str = "Set from Inner"; //testmethod //Inner //Problem eller att göra instansvariabeln str till en klassvariabel public class Problem { private static String str; private static class Inner { private void testmethod() { str = "Set from Inner"; //testmethod //Inner //Problem 13. a) Ström som används för att lagra data på ett skivminne: FileOutputStream b) Superklass för alla klasser som representerar utgående strömmar: OutputStream c) Superklass för flera av de klasser som utökar funktionaliteten hos en existerande ström: FilterOutputStream d) Innehåller metoder för att skicka olika typer av primitiva datatyper, t.ex. heltal, flyttal: DataOutputStream TDA550 (HT16) 3 Lösningsförslag till instuderingsuppgifter 6

14. a) import java.io.*; public class Faulty { public static void main(string[] arg) throws IOException { BufferedReader infil = new BufferedReader(new FileReader("data.txt")); int totally = 0; int faultybefore = 0; int faultyafter = 0; while(true) { String rad = infil.readline(); if (rad == null) totally++; double diff = Double.parseDouble(rad); if (Math.abs(diff) >= 0.0001) faultybefore++; if (Math.abs(diff) >= 0.00001) faultyafter++; infil.close(); System.out.println("Ej accepterade axlar ökar från " + 100* (double) faultybefore/ totally + " % till " + 100 * (double) faultyafter/ totally + " %."); //main //Faulty TDA550 (HT16) 4 Lösningsförslag till instuderingsuppgifter 6

b) import java.io.*; public class Faulty { public static void main(string[] arg) throws IOException { DataInputStream infil = new DataInputStream(new FileInputStream("data.bin")); int totally = 0; int faultybefore = 0; int faultyafter = 0; while(true) { double diff = infil.readdouble(); totally++; if (Math.abs(diff) >= 0.0001) faultybefore++; if (Math.abs(diff) >= 0.00001) faultyafter++; catch (EOFException e) { //reached end of file infil.close(); System.out.println("Ej accepterade axlar ökar från " + 100* (double) faultybefore/ totally + " % till " + 100 * (double) faultyafter/ totally + " %."); //main //Faulty c) Därför att binärfiler kräver mindre minnesutrymme, samt är enklare och effektivare att bearbeta. 15. a) Klassen måste implementera interfacet Serializable. import java.io.serializable; public class Person implements Serializable { b) import java.io.*; public class Splitt { public static void main(string[] arg) throws IOException, ClassNotFoundException { ObjectInputStream infile = new ObjectInputStream(new FileInputStream(arg[0])); ObjectOutputStream femalefile = new ObjectOutputStream(new FileOutputStream(arg[1])); ObjectOutputStream malefile = new ObjectOutputStream(new FileOutputStream(arg[2])); Person p; while (true) { p = (Person) infile.readobject(); catch (EOFException e) { if (p.isfemale()) femalefile.writeobject(p); else malefile.writeobject(p); infile.close(); femalefile.close(); malefile.close(); catch(filenotfoundexception e) { System.out.println("Öppningen av filerna misslyckades!"); System.exit(0); //Splitt TDA550 (HT16) 5 Lösningsförslag till instuderingsuppgifter 6