Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B2 och V1. Tentamen (1p) 12 januari 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 B-00) 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 String[] dvärgar = "Kloker","Butter","Toker"; double pi = 3.14; int n = 2001; förvirra(dvärgar, pi, n); System.out.println(dvärgar[1] + " " + pi + " " + n); public static void förvirra(string[] dv, double d, int n) dv[1] = "Glader"; d = 2*d; n = n + 1; System.out.println(dv[1] + " " + d + " " + n); Utskrift i metoden förvirra(): Utskrift i metoden main():
2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1] = new Dice("Blå"); int n = 2; System.out.println(titel + tärningar[1].utfall() + n); kastatärningarna(titel, tärningar, n); System.out.println(titel + tärningar[1].utfall() + n); Ange om utskriften kan ha ändrats efter anropet till metoden kastatärningarna(): Variabel Kan ha Motivering ändrats (j/n) titel tärningar 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 Dvd int i; Film f1 = new Film("Den gode, den onde och den fule",180); Film f2 = new Film("Snurre sprätt",10); // koden i a- och b-delen hamnar här class Film private String titel; private int längd; // i minuter private static int antalfilmer = 0; public Film(String titel, int längd) // Konstruktor public int längd() // returnerar filmens längd public void info() // Skriver ut filmens titel och längd public static int antalfilmer() // returnerar det totala antalet filmer 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 Film.info(); f1.längd(180); i = f1.längd(); System.out.println(Film.antalFilmer());
4 b) Skriv kod som skriver ut de 2 filmernas summerade längd. 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; Dice d; Dice[] tärningar = new Dice[3]; tärningar[0] = new Dice(); tärningar[1] = new Dice(); tärningar[2] = new Dice(); Vector v = new Vector(); a) Skriv kod som kopierar tärningar:s innehåll till v med hjälp av en for-slinga. b) Skriv kod som gör så att d refererar till det sista elementet i v.
Namn: Personnr: 5 Uppgift 4: Klasser Följande 2 klasser kan användas för att beskriva somliga kändisar: class Skvaller private Diva[] divor; private int antal = 0; public Skvaller() divor = new Diva[20]; public int medelpatetfaktor() // den genomsnittliga patetfaktorn för alla celebriteter int summa = 0; for(int i = 0; i < antal; i++) // koden i b-delen ska in här return summa/antal; class Diva private String namn; private int patetfaktor; // varierar mellan 0-5 public Diva(String namn, int pf) // Konstruktor // koden i a-delen ska in här public String namn() // returnerar människans namn return namn; public int hurpatetisk() // självförklarande return patetfaktor; a) Skriv den kod som saknas i konstruktorn i klassen Diva.
6 b) Skriv den kod som saknas i metoden medelpatetfaktor() i klassen Skvaller.
Namn: Personnr: 7 Uppgift 5: Minnesbilder Betrakta följade program: public class Hockey Spelare s1 = new Spelare("Peter Forsberg", false); Spelare s2 = new Spelare("Mike Modano", true); System.out.println(s1.frisk()); class Spelare private String namn; private boolean frisk; private static int antalspelare = 0; public Spelare(String namn, boolean frisk) this.namn = namn; this.frisk = frisk; antalspelare++; public boolean frisk() // a return frisk; 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 Mona // b class Räkning private String beskrivning; private boolean betald; public Räkning(String beskrivning) // Konstruktor this.beskrivning = beskrivning; this.betald = false; public void betalaräkning() betald = 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 Mona main(...) args r1 String[]? Räkning Räkning objekt String beskrivning boolean betald true Räkning r2 Räkning String objekt "Bilskatt" Räkning objekt beskrivning betald String boolean false String objekt "p bot"