2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl 9.00-12.00 Hjälpmedel: En Javabok (det blå Javahäftet som ingår i kursbunten räknas som en Javabok). För betyget godkänd 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 L-00) på omslaget. Skriv svaren i ramarna i detta häfte. Glöm inte att skriva namn och personnummer på varje blad. Lycka till! 1 Parametrar a) Vad blir utskriften från följande program: class HockeyVM { public static void main(string[] barf){ String betyg = "ett fiasko!"; String[] trekronor = new String[22]; trekronor[21] = "Foppa"; int antalguldmedaljer = 2; turnering(trekronor, antalguldmedaljer, betyg); System.out.println(treKronor[21] + " har " + antalguldmedaljer + " guld och är " + betyg); static void turnering(string[] lag, int antalguldmedaljer, String betyg) { lag[21] = "Mats Sundin"; antalguldmedaljer++; betyg = "en hjälte!"; System.out.println(lag[21] + " har " + antalguldmedaljer + " guld och är " + betyg); Utskrift i metoden turnering: har guld och är Utskrift i metoden main: har guld och är b) Följande finns definierat: class Färgval { public static void main(string[] garf){ String[] tröjor = new String[2]; String tröja = "Gul"; tröjor[1]="blå"; System.out.println(tröja + tröjor[1]); tvättmaskin(tröja, tröjor); System.out.println(tröja + tröjor[1]); Ange om utskriften kan ha ändrats efter anropet till metoden tvättmaskin. Svaret måste motiveras. Variabel Kan ha ändrats (j/n) Motivering tröja tröjor[1]
2 Metodanrop Följande deklarationer är redan gjorda och inga andra får göras för att lösa uppgiften: class TV3 { public static void main(string[] glapp) { Journalist skitsnackare = new Journalist(); int i; double d; // koden i a- och b-delen hamnar här class Journalist { public int kollhalt() /* Returnerar andelen av det Journalisten säger som är rätt */ {... public int avdrag(int spritkostnader, double bordellkostnader, int totalkostnad) /* Returnerar största lagliga avdrag från totalkostnad givet sprit- och bordellkostnaderna */ {... public static void skrivreseräkning(string ändamål) /* Skriver ut en reseräkning för ändamålet */{... a) Kryssa för och ange vilka av följande satser (metodanrop som görs i main) som är riktiga respektive felaktiga, samt för de felaktiga vad som är fel! Sats Rätt Fel Orsak Journalist.avdrag(30000, 27856.50, 60000); i = avdrag(30000, 27856.50, 60000); i = skitsnackare.avdrag(d, d, i); i = skitsnackare.avdrag ("30000 27856.50 60000"); b) Skriv kod som skriver en reseräkning för hockey-vm med hjälp av metoderna ovan.
3 Vektorer Följande deklarationer är redan gjorda och inga andra får användas för att lösa uppgifterna. final int MAX_ANTAL_LÄNDER = 16; String[] brahockyländer = new String[MAX_ANTAL_LÄNDER]; BufferedReader tangentbord = new BufferedReader(new InputStreamReader(System.in)); Vector blåbärsländer = new Vector(); int i; String s; // koden i a- och b-delen ska in här I blåbärsländer har dessutom teckenföljder (String) lagts in. a) Skriv kod som läser in namn på 12 länder till brahockyländer från tangentbordet. b) Skriv kod som skriver ut namnen på alla blåbärsländer på skärmen..
4 Klasser Hardy Nilsson behöver hjälp men att hålla rätt statistik för sina spelare. T ex vill han veta antalet gjorda mål, antalet målpassningar, antalet passningar och antalet skott för att kunna avgöra bland annat hur själviska och effektiva spelarna är. Nedan finns två klasser som kan vara till hjälp. class Spelare { private int skott, passningar, mål, målpassningar; public Spelare(String namn) { // initierar och nollställer instansvariablerna // b) public int gjordamål() { // returnerar antalet gjorda mål av denna spelare return mål; // andra metoder som ej visaas här // slut på klassen Spelare class Turnering { private Spelare[] spelare; private int antalspelare; public int summagjordamål() { // summerar alla spelares gjorda mål int summa = 0; Spelare s; for (int i=0; i < antalspelare; i++) { s = spelare[i]; // a) return summa; // andra metoder som ej visas här // slut på klassen Turnering a) Skriv koden som saknas i metoden summagjordamål i klassen Turnering. b) Skriv koden som saknas i konstruktorn i klassen Spelare.
5 Minnesbilder Betrakta följande program: class Hockylag { public static void main(string[] args) throws IOException{ Spelare hjälte = new Spelare("Foppa", 25, 0); System.out.println("Bästa effektiviteten är " + hjälte.effektivitet() ); Spelare looser = new Spelare("Bush", 0, 2004); System.out.println("Sämsta är " + looser.effektivitet() ); class Spelare { private int plusmål; // antalet mål framåt som spelaren varit på planen private int minusmål; // antalet mål bakåt som spelaren varit på planen public Spelare(String namn, int plus, int minus) { // Initierar instansvariablerna this.namn = namn; plusmål = plus; minusmål = minus; public String effektivitet() { // Returnerar effektiviteten för spelaren if (minusmål == 0) { // a return "oändligt stor"; else { return Double.toString(plusmal/(double) minusmal); // Slut på klassen Spelare a) Rita en bild vid läge (a) i programmet. Glöm inte this och args. Klasser och klassvariabler Metodanrop, parametrar och lokala variabler Instanser och instansvariabler Betrakta följande program:
class Hockey { public static void main(string[] args) throws IOException{ // Här ska koden för b in // Slut på klassen Hockey class Spelare { private String klubblag; public Spelare(String namn) { // initierar instansvariablerna this.namn = namn; klubblag = "Brunflo IK"; public void värvaspelare(string klubblag) { // ändrar klubbtillhörigheten this.klubblag = klubblag; // slut på klassen Spelare b) Skriv den kod som behövs för att det ska se ut som nedan i minnet. Klasser och klassvariabler Metodanrop, parametrar och lokala variabler Instanser och instansvariabler Hockey Spelare main args spelare null Spelare-instans namn klubblag "Foppa" "Colorado Avalanche"