Lösningar för tenta 2 DAT043,

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

Språkkonventioner och redigering av tal.

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

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

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

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

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

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

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)

Objektorienterad programmering i Java

Objektorienterad Programmering (TDDC77)

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

Repetition av OOP- och Javabegrepp

Konstruktion av klasser med klasser

TENTAMEN OOP

Tentamen , Introduktion till Java, dtaa98, dtea53

Repetition av OOP- och Javabegrepp

Kopiering av objekt i Java

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

F4. programmeringsteknik och Matlab

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

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

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

Fördjupad Java. Undantagshantering. Fel

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Ö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

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

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

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();