Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl 14.00 17.00 Hjälpmedel: En Javabok. För betyget godkänt krävs att a- eller b-delen av varje fråga (uppgift 1 4) samt a- eller b- eller c-delen av fråga 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 V-99) 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? class ChokladAsk String kvalitet = "Godkänd"; char kontrollant = '2'; int[] pralinposition = 10, 11, 12, 20, 21, 22; foo(pralinposition, kvalitet, kontrollant); System.out.println(kontrollant + " " + pralinposition[2] + " " + kvalitet); static void foo(int[] pralinp, String kval, char kontr) kontr = '3'; pralinp[1] = 0; pralinp[2] = 0; kval = "Utmärkt"; System.out.println(kontr + " " + pralinp[2] + " " + kval); Utskrift i metoden foo(): Utskrift i metoden main():
2 b) Följande finns definierat: class ChokladPralin // Div kommandon int antalromrussin = 3; double mängdkakao = 220; FinKonditor sven = new FinKonditor(antalRomRussin, mängdkakao); System.out.println(antalRomRussin + " " + mängdkakao + " " + sven.rapporteraingredienser()); sven.skapanyttrecept(); System.out.println(antalRomRussin + " " + mängdkakao + " " + sven.rapporteraingredienser()); // Div kommandon class FinKonditor // Div deklarationer av instansvariabler public FinKonditor(int nrrr, double mängdkk) // Div kommandon, bla initiering av instansvariabler public String rapporteraingredienser() // Div kommandon, bla kommer värden av instansvariablerna att returneras public void skapanyttrecept() // Div kommandon, bla kommer instansvariablerna att få nya värden // Div deklarationer Ange för följande om utskriften kan ha ändrats efter anropet till metoden skapanyttrecept(). Variabel/returvärde Kan ha Motivering ändrats (j/n) antalromrussin mängdkakao sven.rapporteraingredienser()
Namn: Personnr: 3 Uppgift 2: Metodanrop Följande deklarationer av variabler och metoder är redan gjorda. class LångfilmsSnack ChipsTallrik mintallrik = new ChipsTallrik(270, "MexHot"); // Koden i a-delen och b-delen hamnar här class ChipsTallrik private int antalchips; private String dipsås; public ChipsTallrik(int antal, String sås) antalchips = antal; dipsås = sås; public int chipskvar() return antalchips; public void dippa() antalchips--; 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 System.out.println(dippa()); System.out.println(minTallrik.dippa()); int chips = mintallrik.chipskvar(); mintallrik.dippa(5); b) Skriv kod som dippar en gång ifall antalet chips är fler än 2. Använd dig av de metoder som finns beskrivna ovan.
4 Uppgift 3: Vektorer (arrayer) och klassen Vector Följande deklarationer är redan gjorda. char[] arr = new char[10]; int i, j; char ch; Vector vek = new Vector(); a) Skriv kod som byter plats på första och sista elementets innehåll i vektorn (arrayen) arr. b) Skriv kod som lägger till vektorn (arrayen) arr i Vectorn vek, samt därefter tar reda på (lagra lokalt) antalet element i vek. Uppgift 4: Klasser När skafferiet är tomt tvingas man skaffa den rejäla frukost som dagen kräver i närmaste affär. Nedan ser du deklarationer av klasserna Frukost och Macka, men klassen Macka är inte riktigt klar. Kan du hjälpa till att skriva klart den? Följande deklarationer är redan gjorda och du får inte lägga till några nya fält (instansvariabler eller metoder) i klasserna. class Frukost private int dagensdatum; public Frukost(int datum) dagensdatum = datum;
Namn: Personnr: 5 public void enmackatill() Macka m = new Macka("Kavring"); if(m.returneradatum() >= dagensdatum-1) System.out.println("Mums, den se god ut!"); else System.out.println("Hmm, den ser inte färsk ut..."); class Macka private String brödsort; private String pålägg; private int tillverkningsdatum; public Macka(String sort) // a) Initierar instansvariabeln brödsort public int returneradatum() // b) Returnerar instansvariabeln tillverkningsdatum a) Skriv den kod som saknas i konstruktorn Macka(String sort) i klassen Macka. b) Skriv den kod som saknas i metoden returneradatum().
6 Uppgift 5: Minnesbilder Betrakta följade program. class GlassStrut GlassKula[] strut; GlassKula kula1; strut = new GlassKula[4]; kula1 = new GlassKula("ApelsinSorbet"); // (a) strut[0] = kula1; kula1.ändratemperatur(13.0); // Mer kod (mer glass förstås) class GlassKula private String smak; private double temperatur; public GlassKula(String smak) this.smak = smak; temperatur = -18.0; public void ändratemperatur(double ökning) temperatur += ökning; // (b) I uppgifterna nedan ska du rita bilder av minnet vid två tillfällen under exekveringen. Bilderna 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).
Namn: Personnr: 7 a) Rita en bild av minnet vid läge (a) i programmet. Klasser och Metodanrop, parametrar och Objekt och instansvariabler klassvariabler lokala variabler b) Rita en bild av minnet vid läge (b) i programmet. Klasser och Metodanrop, parametrar och Objekt och instansvariabler klassvariabler lokala variabler
8 5c) Betrakta följade program. class Espresso String favoritkaffe = "Java"; double temp = 100; KaffeSlurk morgonkaffe; morgonkaffe = new KaffeSlurk(favoritKaffe); // Koden i c-delen hamnar här class KaffeSlurk private String typ; private double temperatur; private boolean mjölkskum; public KaffeSlurk(String valdtyp) typ = valdtyp; mjölkskum = false; temperatur = 78; public void tillsättskummadmjölk() mjölkskum = true; public void svalnatill(double temp) temperatur = temp; Klasser och klassvariabler Espresso KaffeSlurk Metodanrop, parametrar och lokala variabler main(...) String[] args? String favoritkaffe temp morgonkaffe double 100.0 KaffeeSlurk Objekt/Instanser och instansvariabler KaffeSlurk-objekt String-objekt String typ "Java" double temperatur 62.0 boolean mjölkskum true Skriv de satser som ska invidc) i main för att det ska seutsomovan i minnet.