Lösningar för tenta 2 DAT043,

Relevanta dokument
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.

Lösningar för tenta 3 DAT043,

DAT043 Objektorienterad Programmering

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Språkkonventioner och redigering av tal.

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

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

DAT043 - föreläsning 8

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

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

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

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

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

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

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

Föreläsning 14. Filhantering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

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

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

Tentamen OOP

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

DAT043 - Föreläsning 7

Föreläsning 2, vecka 8: Repetition

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

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

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.

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

Objektorienterad Programmering (TDDC77)

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

Objektorienterad programmering i Java

Objektorienterad Programmering (TDDC77)

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

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

Repetition av OOP- och Javabegrepp

Konstruktion av klasser med klasser

TENTAMEN OOP

Objektorienterad Programmering DAT043

Tentamen , Introduktion till Java, dtaa98, dtea53

Repetition av OOP- och Javabegrepp

Parallellism, återblick

Kopiering av objekt i Java

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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

F4. programmeringsteknik och Matlab

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

Lösningsförslag till tentamen

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

JAVAUTVECKLING LEKTION 7

Objektorienterad Programmering (TDDC77)

Input. Programmering. Andra källor

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Objektorienterad programutveckling, fk

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

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

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

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Fördjupad Java. Undantagshantering. Fel

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

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

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

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

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)

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Programmeringsteknik för Bio1 och I1. Dagens program. Så här tillämpar vi det på J-uppgifterna. Allmänna programmeringstips. Övningsgrupp 3 (Sal E33)

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

1 Comparator & Comparable

Algoritmer. Två gränssnitt

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

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 FYTA11 Javaprogrammering

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

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

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

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

Laboration 1 - Grunderna för OOP i Java

Transkript:

Lösningar för tenta 2 DAT043, 2018-06-08. Uppgift 1 public class Car{ private String model; private String year; private double price; public Car(String model, String year, double price){ this.model = model; this.year = year; this.price = price; public String getmodel(){return model; public String getyear(){return year; public double getprice(){return price; public void setmodel(string m){model = m; public void setyear(string y){year = y; public void setprice(double p){price = p; Uppgift 2 public class CarTest{ Car c1 = new Car("Volvo V40", "2014", 100000); Car c2 = new Car("Volvo Amazon", "1970", 5000); System.out.println("Pris 1: " + c1.getprice()); System.out.println("Pris 2: " + c2.getprice()); c1.setprice(c1.getprice() * 0.95); c2.setprice(c2.getprice() * 0.93);

Uppgift 3 Kompilatorfelen beror på att vi inte har hanterat s.k. checked exceptions, som kan uppstå när man hanterar t.ex. I/O i Java. Kompilatorn kräver att man antingen deklarerar att metoden i fråga kan komma att kasta ett sådant undantag, eller att man lägger in koden i ett try-catch block som hanterar undantagen. Eftersom MalformedURLException är en subklass till IOException räcker det att man hanterar det senare för att få rätt svar på frågan (men att hantera dem båda separat godkänns givetvis också, och kan vara att föredra om man vill ge användaren mer information). Alternativ 1: try-catch: String urlstr = args[0]; URL url = new URL(urlstr); URLConnection conn = url.openconnection(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); in.lines().foreach(l -> System.out.println(l)); catch(ioexception e){ System.out.println("Uppgift3: " + e.getmessage()); Alternativ 2: med throws: public static void main(string[] args) throws IOException{ Uppgift 4 2, 4, 5, 6 orsakar fel. Frågan testar om man känner till hur arv (inheritance) fungerar i Java, samt hur interfaces används, och hur s.k. type-casts fungerar. Uppgift 5 A, D, F är sanna. Frågan testar om man känner till skillnaden mellan instansvariabler och klassvariabler. Instansvariabler finns det en instans (eller kopia om man så vill) för varje objekt som tillhör klassen. Instansvariabler tillhör alltså individuella objekt som skapats. Olika objekt som tillhör samma klass kan ha olika värden på sina instansvariabler. Klassvariabler däremot kan ses som global variabler, som delas av samtliga objekt. Det finns alltså exakt en kopia av dem och de deklareras med nyckelordet static. Nyckelordet final används för att deklarera att något är en konstant, dvs att de inte kan ändras efter initiering.

Uppgift 6 class Pair<T,U>{ T fst; U snd; public Pair(T fst, U snd) { this.fst = fst; this.snd = snd; För denna fråga bör man använda två olika typ-variabler (som T och U ovan). Har man bara en typvariabel T går det bara att skapa par där både fst och snd är av samma typ. Dock har man fått rätt för ovanstående även om man använt samma typvariabel både för fst och snd då frågan inte explicit specificerade att fst och snd ska kunna ha olika typ. Uppgift 7 Felet är att klassen Person inte har implementerat någon equals-metod. Eftersom alla klasser i Java implicit är subklasser till Object, så ärvs istället equals-metoden från Object. Denna kommer dock enbart att kontrollera om de två referenserna p1 och p3 är referenser till samma objekt, vilket de inte är! Om man vill kunna jämföra ifall objekt av typ Person har samma värden, så behöver man överskugga equals-metoden, så att objektens innehåll jämförs, istället för referensen. Notera att man för att överskugga equals egentligen måste ha exakt samma typ som i equals-metoden för Object. Dock godkänns lösningar där argumentet är av typ Person. public class Person{ private int age; private String name; public Person(int a, String n){ age = a; name = n; public boolean equals(object o){ Person p = (Person) o; return age==p.age && name.equals(p.name);

Uppgift 8 public static <T extends Comparable<T>> int binarysearch(t x, T[] arr) { int l = 0, r = arr.length - 1; while (l <= r) { int m = (l + r) / 2; int c = x.compareto(arr[m]); if (c < 0) { // x måste vara till vänster om m r = m - 1; else if (c > 0) { // x måste vara till höger om m l = m + 1; else { // c == 0, hittat x. return m; // hittade inte x return -1; Här gäller det att vara noga med att hålla reda på vilken del av arrayen man ska söka i. Det bästa är att definiera två variabler l och r som anger start och slut på delen man söker. Vi måste även ange att typen T ska vara sådan att det finns en compareto-metod, vilket vi gör i metodens header. Uppgift 9 Denna uppgift ska vara svår. Vi behöver använda oss av biblioteksfunktioner för klassen String, och då specifikt charat och indexof. Båda fanns med i lathunden som delades ut. utöver detta måste man naturligtvis även hålla rätt på vad man ska göra när man kommer till slutet av alfabetet. Kod på nästa sida.

import java.util.*; import java.io.*; class Uppgift9{ public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyzåäö"; public static String encode(string text, int key){ String plaintxt = text.tolowercase(); String cipher = ""; for(int i = 0; i < plaintxt.length(); i++){ int charpos = ALPHABET.indexOf(plainTxt.charAt(i)); int keyval = (key + charpos) % ALPHABET.length(); char codechar = ALPHABET.charAt(keyVal); cipher += codechar; return cipher; if (args.length!= 3) { System.out.println("Felaktigt antal argument."); Scanner in = null; // Fil för indata. in = new Scanner(new File(args[0])); catch(filenotfoundexception e){ System.out.println(e.getMessage()); PrintStream w = null; // Fil för utdata w = new PrintStream(new File(args[1])); catch(filenotfoundexception e){ System.out.println(e.getMessage()); // Nyckel för kryptering. int key = Integer.parseInt(args[2]); while(in.hasnext()){ String s = encode(in.next(),key); w.print(s + " "); in.close(); w.close();