Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för M1, K2, Media1 och I1 (1p) 16 december 2000 Hjälpmedel: En Javabok. System.out är ett objekt kopplat till skärmen, dvs samma sak som i labbarna kallas utdata. 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-00) på omslaget. Skriv svaren i ramarna i detta häfte. Glöm inte att skriva namn och personnummer på varje blad! Försök svara på både a-delen och b-delen! Lycka till! Uppgift 1: Parametrar a) Vad blir utskriften från följande program? int antalpistvakter = 3; String hotellnamn = "Svartlien"; String [] pistvakt = new String [antalpistvakter]; pistvakt [0] = "Sven"; pistvakt [1] = "Jan"; pistvakt [2] = "Olle"; foo(hotellnamn, antalpistvakter, pistvakt); System.out.println( hotellnamn + " : " + antalpistvakter +" pistvakter : " + " " + pistvakt[0] + " " + pistvakt[1] + " " + pistvakt[2] ); public static void foo(string inamn, int in, String [] ipv) inamn = inamn + " sporthotell"; ipv[0] = ipv[0] + " E"; ipv[1] = ipv[1] + " E"; ipv[2] = ipv[2] + " E"; in = in*4; System.out.println( inamn + " in = " + in + " " + ipv[0] + " " + ipv[1] + " " + ipv[2] ); Utskrift i metoden foo(): Utskrift i metoden main():
2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); System.out.println(namn + " " + moms + bodegan.hojtpris()); bodegan.hojtpris()); class Bodega // Diverse deklarationer private double pris; public Bodega() public void ändra(double imoms, String inamn) public double hojtpris() // Diverse deklarationer Något verkar vara fel i metoden ändra(), så programmeraren skriver ut värdena både före och efter anropet till ändra(). Ange för följande uttryck om utskriften kan ha ändrats efter anropet till metoden ändra(). Variabel Kan ha Motivering ändrats (j/n) namn moms bodegan.hojtpris()
Namn: Personnr: 3 Uppgift 2: Metodanrop Följande deklarationer av variabler och metoder är redan gjorda och inga andra får användas för att lösa uppgiften. Bodega bodegan = new Bodega(); // Koden i a-delen och b-delen hamnar här class Bodega private int happyhourfr = 22; private int happyhourto = 23; public Bodega() public void happyhour(int ifrom, int ito) happyhourfr = ifrom; happyhourto = ito; public int happyhourfrån() return happyhourfr; public int happyhourtill() return happyhourto; 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 Bodega baren = new bodegan; Bodega nybodega = new Bodega("Ole"); Bodega.happyHour(21, 22); bodegan.happyhour(21, 22); b) Skriv kod i main som på skärmen skriver ut när bodegan har "happy hour".
4 Uppgift 3: Arrayer och vektorer a) Skriv om nedanstående tre kommandon (satser) i metoden foo med hjälp av en slinga. public static void foo(string inamn, int in, String [] ipv) ipv[0] = ipv[0] + " E"; ipv[1] = ipv[1] + " E"; ipv[2] = ipv[2] + " E"; b) Skriv kod som visar hur följande satser skulle skrivas om vi valde att använda en Vector för att lagra pistvakternas namn istället för en String []. String [] pistvakt = new String [antalpistvakter]; pistvakt [0] = "Sven"; pistvakt [1] = "Jan"; System.out.println( " Pistvakt 1 : " + pistvakt[0] + " Pistvakt 2 : " + pistvakt[1] )
Namn: Personnr: 5 Uppgift 4: Klasser Svartlien Sporthotell har en skidlift som kallas dragbanan och har 800 m vajer. Skidliftar med denna konstruktion skall smörjas efter en viss tids driftstid, f n 50 timmar. Vi har följande kod: Skidlift dragbanan = new Skidlift(800); if (dragbanan.skallsmörjas(50)) System.out.println("Smörj draglinan!"); class Skidlift private int vajerlängd; private int timmarsedansmörjning = 0; //tid i timmar sedan sista smörjning public Skidlift(int il) // En ny skidlift med vajerlängden il // Här är koden för fråga a public boolean skallsmörjas(int eftertimmar) // Här är koden för fråga b // Här finns bl a en metod som ökar instansvariablen timmarsedansmörjning. a) Skriv koden för konstruktorn Skidlift(int il). Parmetern il används för att bestämma skidliftens vajerlängd. b) Skriv den kod som saknas i metoden skallsmörjas() i klassen Skidlift. Skidliften skall smörjas när parametern eftertimmar är mindre än drifttiden i instansvariablen timmarsedansmörjning.
6 Uppgift 5: Minnesbilder Betrakta följade program. Scooter scootern = new Scooter("Ockelbo", 20.0); scootern.tanka (15.0); // Läge a scootern.starta (); if (scootern.ärmotornigång()) System.out.println("Kör till Kalmatjåkko"); class Scooter private String fabrikat; private final double tankvolym; private double bensinvolym = 0; private boolean motornigång = false; public Scooter( String ifabrikat, double itankvolym) fabrikat = ifabrikat; tankvolym = itankvolym; public void tanka(double ivolym) bensinvolym = bensinvolym + ivolym; if (tankvolym < bensinvolym) bensinvolym = tankvolym; public void starta() motornigång = (0.0 < bensinvolym); public boolean ärmotornigång() // Läge b return motornigång ; I uppgifterna nedan skall du rita bilder av minnet vid två tillfällen under exekveringen. Bilderna skall innehålla samtliga klasser med tillhörande klassvariabler, samtliga metodanrop med lokala variabler (glöm inte this) och samtliga objekt med instansvariabler. Alla variablers värden skall framgå av bilden.
Namn: Personnr: 7 a) Rita en bild av minnet vid läge (a) i programmet. Klasser och klassvariabler Metodanrop och lokala variabler Objekt och instansvariabler b) Rita en bild av minnet vid läge (b) i programmet. Klasser och klassvariabler Metodanrop och lokala variabler Objekt och instansvariabler