DVS SU/KTH 1 (6) OOP OOP Exempel Tentamen 2007 Avser kurserna: DSK1:OOP GES:OOP ID1013 GKOOP-distans Anvisningar Skriv namn och personnummer på varje inlämnat blad. Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. Max antal poäng är 30. För att bli godkänd på tentan (minst betyg E) krävs dels minst 4 poäng sammanlagt på uppgift 1 och uppgift 2 och dels minst 15 poäng sammanlagt på hela tentan. För högre betyg krävs: Betyg D: minst 18 poäng samt högst en uppgift med 0 poäng. Betyg C: minst 21 poäng samt ingen uppgift med 0 poäng. Betyg B: minst 24 poäng samt ingen uppgift med 0 poäng. Betyg A: minst 27 poäng samt uppgifterna lösta med korrekt användande av objektorienterade principer (t.ex. inkapsling, ej upprepning av kod). Betyget Fx med möjlighet att komplettera ges till studenter som fått 12-14 poäng eller som fått mer än 14 poäng men missat att få 4 poäng på uppgift 1+2. Hjälpmedel Samtliga läroböcker om Java är tillåtna hjälpmedel. Kompendier räknas INTE som läroböcker. Lycka till!!!! Lösningsförslag kommer att presenteras på kursens webbsidor.
DVS SU/KTH 2 (6) OOP Uppgift 1 (6 poäng) Om man exekverar följande programrader, vad kommer att att skrivas ut på skärmen (du skall i dina svar vara noga med vad som skrivs på vilken rad, alltså beakta skillnaden mellan print och println). A int tal1 = 10, tal2 = 5; if (tal1-- > tal2++) System.out.println(--tal1); else System.out.println(++tal2); System.out.println(tal1--); System.out.println(tal2++); B int z = 25; for (int x=1; x<z; x++){ System.out.print(z); z-=4; System.out.println( +(z+x)); C int[] arr = new int[10]; for (int x=0; x<arr.length; x++) arr[x] = x+15; System.out.println( Arrayen: ); for (int x : arr){ System.out.print(x+ ); if (x%5 == 0) System.out.println();
DVS SU/KTH 3 (6) OOP Uppgift 2 (6 poäng) Om man exekverar (interpreterar) följande Java-program - vad kommer att skrivas ut? main-metoden ligger i class Uppgift2, startas alltså med: java Uppgift2 class Uppgift2{ public static void main(string[]args){ Trippen t1=new Funken("Ekorre"); Trippen t2=new Naddan("Krokodil"); Trippen t3=new Funken("Iller"); t1.skriv(); t2.skriv(); t3.skriv(); class Trippen{ private String sak="kameler"; private int antal=5; public Trippen(String sak, int antal){ this.sak=sak; this.antal=antal; public Trippen(){ this("grävling", 3); public void skriv(){ for (int x=0; x<antal; x++) System.out.print(getSak()); System.out.println(sak); public String getsak(){ return sak; class Funken extends Trippen{ public Funken(String vad){ super(vad, 2); public void skriv(){ System.out.println("Start+++++"); super.skriv(); System.out.println("Stopp-----"); class Naddan extends Trippen{ private String mingrej; public Naddan(String grej){ mingrej=grej; public String getsak(){ return mingrej;
DVS SU/KTH 4 (6) OOP Uppgift 3 (6 poäng) Skriv ett litet Java-program (en klass med en main-metod) som frågar användaren efter ett antal textsträngar. Därefter skall programmet fråga användaren efter en längd och sedan skriva ut alla textsträngar som har fler tecken än denna angivna längd. Programmet skall först fråga användaren efter hur många textsträngar som skall matas in. Därefter får användaren mata in alla dessa strängar. Sedan frågas efter längden och slutligen skrivs alla strängar med fler tecken än den angivna längden ut på skärmen. När programmet körs skall det se ut ungefär så här: Hur många textsträngar? 7 Sträng 1> Hejsan Hoppsan Sträng 2> Järnvägsviadukt Sträng 3> Papegoja Sträng 4> H876% ZQ916+?# Sträng 5> Gatsten Sträng 6> Rulltårta Sträng 7> Senapsmarinad Ange längden: 10 Textsträngarna som är längre än 10 tecken: Hejsan Hoppsan Järnvägsviadukt H876% ZQ916+?# Senapsmarinad Som hjälp kan nämnas att det i klass String bl.a. finns metoden: public int length() Returnerar textsträngens längd
DVS SU/KTH 5 (6) OOP Uppgift 4 (6 poäng) Följande klasser finns: abstract class Djur{ private String namn; private int ålder; public int getålder(){ return ålder; public String getnamn(){ return namn; class Hund extends Djur{ private int vikt; public int getsvans(){ return vikt*getålder()/10; class Katt extends Djur{ private int lathet; public int getlathet(){ return lathet; Klasserna innhåller även lämpliga konstruktorer, ej relevanta för denna uppgift. Del A Skriv en metod som får en ArrayList<Djur> som argument (fylld med blandade Hund- och Katt-objekt) och som skriver ut en lista över alla objektens sort och namn, enligt: Katt: Misse Hund: Fido Hund: Fluffie Katt: Snöboll Ni får (om ni så önskar) lägga till saker i klasserna ovan. Redovisa i så fall vad ni vill lägga till och var (i vilken/vilka klasser) ni vill lägga till det. Del B Skriv en annan metod som även den får en ArrayList<Djur> (fylld med blandade Hund- och Katt-objekt) som argument. Er metod skall skriva ut namnet på den Katt som har störst lathet (det katt-objekt vars metod getlathet returnerar störst värde). Om det finns flera Katter med samma (lika stora) lathet kan vilken som helst av dem skrivas ut, om det i argument-samlingen inte finns några Katt-objekt skall Inga Katter skrivas. OBS metoderna som ni skriver i A och B måste ju i Java ligga inuti någon klass. Det kan ni strunta i i denna uppgift, det räcker alltså med själva metoderna. Utskrifterna som görs skall göras i terminalfönstret (alltså med hjälp av System.out).
DVS SU/KTH 6 (6) OOP Uppgift 5 (6 poäng) Man vill i ett Java-program kunna representera olika saker som finns i skogen och som olika djur kan äta. För detta finns en superklass Mat som ser ut så här: abstract class Mat{ private int vikt; public Mat(int vikt){ this.vikt=vikt; public int getvikt(){ return vikt; abstract public int getnäringsvärde(); Alla olika sorters Mat har en vikt (en int som anges vid skapandet) samt ett näringsvärde. Klass Mat får varken ändras eller utökas. Er uppgift är att skriva klassen Nöt som är en subklass till Mat. En Nöt har en viss brunhet (en int som anges vid skapandet). Man skall utifrån ett Nötobjekt kunna avläsa brunheten. Brunheten hos ett Nöt-objekt skall kunna ändras men skall aldrig kunna vara lägre än tre. Näringsvärdet för en Nöt räknas ut på följande sätt: Om Nötens vikt är större än 10 så är näringsvärdet = vikt * brunhet. Annars så är näringsvärdet = brunhet * 5. En Nöts attribut, konstruktorer och metoder skall ha lämpliga åtkomstmodifierare.