Namn: Personnr: 1 2D1310 Programmeringsteknik i Java Tentamen (1p) den 22:a augusti 2002, kl 14.00 17.00 Hjälpmedel: En javabok(det blå javahäftet som ingår i kursbunten räknas som en javabok). Förklarande anteckningar får göras i boken, men inga lösningar till tentor får antecknas eller medföras. För betyget godkänt krävs att a- eller b-delen av varje fråga (uppgift 1-5) är rätt besvarad. Ett mindre fel som inte har med frågan att göra kan accepteras. Skriv linje och årskurs (t ex M-01) på omslaget. Skriv svaren i ramarna i detta häfte. Glöm inte att skriva namn och personnummer på varje blad! Lycka till! Uppgift 1: Parametrar a) Vad blir utskriften från följande program? public class Uppgift1a public static void main(string[] args) String[] vv = "hyres","bostads"; int dussin = 12; boolean god = false; förvirra(vv, dussin, god); System.out.println(vv[1] + " " + dussin + " " + god); public static void förvirra(string[] v, double d, boolean b) v[1] = v[1] + "fel"; d = 2 * d; b = false; System.out.println(v[1] + " " + d + " " + b); Utskrift i metoden förvirra(): Utskrift i metoden main():
2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar = new Bil[100]; bilar[0] = new Bil("Peugeot 206"); bilar[1] = new Bil("Ford Fiesta"); int n = 2; System.out.println(färg); System.out.println(bilar[1].färg); System.out.println(n); målabilen(bilar, färg, n); System.out.println(färg); System.out.println(bilar[1].färg); System.out.println(n); public static void målabilen(bil[] bilar, Color c, int n) class Bil public String namn; public static Color färg; public Bil(String namn) this.namn = namn; Ange om utskriften av följande kan ha ändrats efter anropet till metoden målabilen(): Variabel Kan ha Motivering ändrats (j/n) bilar[1].färg färg n
Namn: Personnr: 3 Uppgift 2: Metodanrop Följande deklarationer av variabler och metoder är redan gjorda och inga andra får göras för att lösa uppgiften: public class Uppgift2 public static void main(string[] args) int i; Bostad b1 = new Bostad("Rum",5000); Bostad b2 = new Bostad("Garderob",2000); // koden i a- och b-delen hamnar här class Bostad private String beskrivning; private double hyra; //månadshyra private boolean tredjehand = false; private static int antalbostäder = 0; public Bostad(String beskrivning, double hyra) this.beskrivning = beskrivning; this.hyra = hyra; antalbostäder++; public double hyra() return hyra; public void hyrutitredjehand() tredjehand = true; public static int antalbostäder() return antalbostäder; a) Markera vilka av följande satser (som utförs i main-metoden) som är riktiga respektive felaktiga och ange för de felaktiga varför de är fel. Om det finns fler fel i en sats behöver du bara ange ett av dessa. Sats Rätt/Fel Motivering Bostad.hyrUtITredjeHand(); b1.hyrutitredjehand(); b1.hyrutitredjehand(false); System.out.println(b1.hyra());
4 b) Skriv kod som beräknar och skriver ut totala antalet Bostäder. Använd dig av de metoder som finns beskrivna ovan. Uppgift 3: Vektorer (arrayer) och klassen Vector Följande deklarationer är redan gjorda och inga andra får göras för att lösa uppgiften: int i; Bolag b; Bolag[] firmor = new Bolag[3]; firmor[0] = new Bolag("Skanska"); firmor[1] = new Bolag("NCC"); firmor[2] = new Bolag("JM"); Vector v = new Vector(); // Klassen Bolag och annan eventuell annan kod som inte visas a) Skriv kod som kopierar firmor:s innehåll till v med hjälp av en for-slinga. b) Skriv kod som gör så att b refererar till det sista elementet i v.
Namn: Personnr: 5 Uppgift 4: Klasser Följande två klasser kan användas för att beskriva fotbolls-vm: class VM private Lag[] deltagare; private int antal; public VM() antal = 32; deltagare = new Lag[antal]; public void top10lista() // skriver ut namnen på lagen med ranking mellan 1 och 10 for(int i = 0; i < antal; i++) // koden i b-delen ska in här class Lag private String namn; private int ranking; public Lag(String namn, int fifaranking) // Konstruktor // koden i a-delen ska in här public String namn() return namn; public int ranking() return ranking; a) Skriv den kod som saknas i konstruktorn i klassen Lag.
6 b) Skriv den kod som saknas i metoden top10lista() i klassen VM.
Namn: Personnr: 7 Uppgift 5: Minnesbilder Betrakta följade program: public class Uppgift5a public static void main(string[] args) Värd v1 = new Värd("Mygel AB"); Värd v2 = new Värd("Holken AB"); v1.muta(30000); class Värd private String namn; private boolean mutbar = false; private static int antal = 0; public Värd(String namn) this.namn = namn; antal++; public void muta(double belopp) if(belopp > 25000)mutbar = true; // a I uppgiften nedan ska du rita en bild av minnet vid ett tillfälle under exekveringen. Bilden ska innehålla samtliga klasser med tillhörande klassvariabler, samtliga metodanrop med lokala variabler och parametrar (glöm inte this) och samtliga objekt med instansvariabler. Alla variablers värden och datatyp ska framgå av bilden. Objekt som är kandidater för skräpsamling ska markeras. Metodanrop som är avslutade ska strykas, eller inte ritas ut (men effekten av anropet ska givetvis synas). a) Rita en bild av minnet vid läge (a) i programmet. Klasser och Metodanrop, parametrar och Objekt och instansvariabler klassvariabler lokala variabler
8 Betrakta följande program: public class Uppgift5b public static void main(string[] args) //b class Köplats private int id; private boolean harbostad = false; private static int antal = 0; public Köplats() id = antal; antal++; public void köpsvartkontrakt() harbostad = true; b) Skriv den kod som behövs på plats (b) för att det ska se ut enligt nedan i minnet. Klasser & klassvariabler Metodanrop, parametrar och lokala variabler Objekt/instanser och instansvariabler Uppgift5b main(...) args k1 String[]? Köplats Köplats objekt int id 0 boolean harbostad true Köplats k2 Köplats antal int 2 Köplats objekt id harbostad int 1 boolean false