Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för I1, K2, L1, M1, Media1 och T1. Tentamen (1p) 6 april 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. Vi reserverar oss för eventuella lättnader av dessa krav. 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 ParameterStrul Köttfärs[] k = new Köttfärs[2]; k[0] = new Köttfärs("Blandfärs", 15); k[1] = new Köttfärs("Kycklingfärs", 10); double vikt = 0.125; int energi = 3000; förvirra(k, vikt, energi); System.out.println(k[1].fetthalt + " " + vikt + " " + energi); public static void förvirra(köttfärs[] kv, double d, int i) kv[1].fetthalt = 5; d = d * 2; System.out.println(kv[1].fetthalt + " " + d + " " + i); class Köttfärs public String namn; public int fetthalt; public Köttfärs(String namn, int fetthalt) this.namn = namn; this.fetthalt = fetthalt; Utskrift i metoden förvirra(): Utskrift i metoden main():
2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpeppar",0.5); // namn och mängd i gram kryddor[1] = new Krydda("Chili",5); int n = 2; System.out.println(titel + kryddor[1].mängd + n); kryddamaten(titel, kryddor, n); System.out.println(titel + kryddor[1].mängd + n); public static void kryddamaten(string titel, Krydda[] kryddor, int n) // Klassen Krydda med innehåll. Ange om utskriften av följande kan ha ändrats efter anropet till metoden kryddamaten(): Variabel Kan ha Motivering ändrats (j/n) titel kryddor[1].mängd 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 GSM int i; Telefon t1 = new Telefon("Nokia 3330",1200); Telefon t2 = new Telefon("Siemens C45",1500); String nr = "08-7906000"; // koden i a- och b-delen hamnar här class Telefon private String modell; private int pris; private static int antaltelefoner = 0; public Telefon(String modell, int pris) // Konstruktor public int pris() // returnerar nallens pris public void ring(string nr) // Ringer upp ett nummer med denna telefon public static int antaltelefoner() // returnerar det totala antalet telefoner 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 t1.ring(); System.out.println(t1.ring(nr)); t2.ring("08-7906000"); t2.ring(112);
4 b) Skriv kod som beräknar och skriver ut antalet telefonobjekt. 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; Krydda k; Krydda[] kryddor = new Krydda[3]; kryddor[0] = new Krydda("Svartpeppar"); kryddor[1] = new Krydda("Basilika"); kryddor[2] = new Krydda("Timjan"); Vector v = new Vector(); a) Skriv kod som BAKLÄNGES kopierar kryddor:s innehåll till v med hjälp av en forslinga. Svartpeppar ska alltså hamna sist i v. b) Skriv kod som gör så att k refererar till det sista elementet i v.
Namn: Personnr: 5 Uppgift 4: Klasser Följande två klasser kan användas för att beskriva ett tentatillfälle: class Tenta private Tentand[] studenter; private int antal = 0; public Tenta() antal = 20; studenter = new Tentand[antal]; public void skrivutnamnpådesompluggatmest() // Skriver ut namnen på dem som pluggat mer än 20 h for(int i = 0; i < antal; i++) // koden i b-delen ska in här class Tentand private String namn; private int tid; // hur lång tid studenten pluggat inför tentan public Tentand(String namn,int nedlagdtid) // Konstruktor // koden i a-delen ska in här public String namn() // returnerar studentens namn return namn; public boolean ambitiös() // true om nedlagd tid är mer än 20 h return tid > 20; a) Skriv den kod som saknas i konstruktorn i klassen Tentand.
6 b) Skriv den kod som saknas i metoden skrivutnamnpådesompluggatmest() i klassen Tenta.
Namn: Personnr: 7 Uppgift 5: Minnesbilder Betrakta följade program: public class Akvarium Fisk f1 = new Fisk("Piraya", true); Fisk f2 = new Fisk("Muräna", true); f2.mata(); class Fisk private String art; private boolean hungrig; private static int antalfiskar = 0; public Fisk(String art, boolean hungrig) this.art = art; this.hungrig = hungrig; antalfiskar++; public void mata() // a hungrig = false; 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 MerMat // b class Grönsak private String namn; private boolean hackad; public Grönsak(String namn) // Konstruktor this.namn = namn; this.hackad = false; public void hackaibitar() hackad = 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 MerMat main(...) args g1 String[]? Grönsak Grönsak objekt String namn boolean hackad false Grönsak g2 Grönsak String objekt "rödlök" Grönsak objekt namn hackad String boolean true String objekt "paprika"