Stockholms universitet 1 (6) OOP OOP Omtenta 2011-08-13 10.00 15.00 Avser kurserna: DSK1:OOP GES:OOP ID1013 Anvisningar 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.
Stockholms universitet 2 (6) OOP Uppgift 1 (6 poäng) Om man exekverar följande programrader, vad kommer att att skrivas ut på skärmen (var noga med vad som skrivs på vilken rad, alltså beakta skillnaden mellan print och println). A String str1="groda", str2="ödla"; int tal=8; if (tal++ > 8) System.out.println(str1); else System.out.println(str2); System.out.println(str1 + tal + str2); B int i1=15, i2=20; while (i1 < i2){ i2--; for (int x = i1; x < i2; x++) System.out.print(x+" "); System.out.println(i1++); C int[]arr=new int[7]; int start=40, index=0; while (index<arr.length){ arr[index++]=start; start -= index+2; System.out.println("Innehåll:"); for (int z : arr) System.out.println(z);
Stockholms universitet 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){ Toppe[]alla=new Toppe[5]; for (int x=0; x<alla.length; x++) if (x==0 x==3) alla[x]=new Klugg(); else alla[x]=new Baffo(); for (int x=0; x<alla.length; x++) alla[x].skriv(); class Toppe{ private String ord="spårvagn"; private int antal=2; public Toppe(String ord, int antal){ this.ord=ord; this.antal=antal; public Toppe(){ this("buss", 3); public void skriv(){ for (int x=0; x<antal; x++) System.out.print(ord); System.out.println(); class Baffo extends Toppe{ private static String[] strarr={"bil", "Tåg", "Båt", "Flygplan"; private static int count=0; public Baffo(){ super(strarr[count++], count); class Klugg extends Toppe{ private String sak="brandbil"; public void skriv(){ System.out.println(sak); super.skriv();
Stockholms universitet 4 (6) OOP Uppgift 3 (6 poäng) Skriv klassen Adoma som skall fungera enligt följande: Om man i ett Java-program skriver så här: Adoma ad1=new Adoma(); Adoma ad2=new Adoma( Groda ); ad1.skriv(); ad2.skriv(); ad1.skriv(3); ad2.skriv(4); så skall följande skrivas ut på skärmen (i terminalfönstret): Magnet Groda MagnetMagnetMagnet GrodaGrodaGrodaGroda Om man i ett annat Java-program skriver följande: Adoma obj=new Adoma( Bord ); obj.skriv(); obj.ändra( Stol ); obj.skriv(2); så skall följande skrivas ut: Bord StolStol När ni skriver klassen Adoma så skall samtliga attribut, konstruktorer och metoder ha lämpliga åtkomstmodifierare.
Stockholms universitet 5 (6) OOP Uppgift 4 (6 poäng) Skriv ett Java-program som frågar användaren efter ett antal ord (String ar). Programmet skall fortsätta att fråga efter ord tills användaren matar in ett ord som redan blivit inmatat. Då skall inmatningen avslutas och programmet skall skriva ut hur många inmatade ord det var (det sista ordet, dubletten, skall ej räknas). Dialogen skulle t.ex. kunna se ut så här: Skriv ett ord: Kokosboll Skriv ett ord: Mjölk Skriv ett ord: Skidåkning Skriv ett ord: Gaffel Skriv ett ord: Badboll Skriv ett ord: Grodyngel Skriv ett ord: CD-spelare Skriv ett ord: Gaffel Det var 7 olika ord som matades in. När ordet Gaffel matades in för andra gången upptäcker programmet en dublett och inmatningen avslutas. För varje inmatat ord så måste man kontrollera om det är likadant som något av alla tidigare inmatade ord. Om så är fallet avbryts inmatningen.
Stockholms universitet 6 (6) OOP Uppgift 5 (6 poäng) Följande klass för att representera personer finns: class Person{ private String namn; private int ålder; private boolean kvinna; //om variabeln kvinna är true så är personen en kvinna public Person(String namn, int ålder, boolean kvinna){ this.namn=namn; this.ålder=ålder; this.kvinna=kvinna; public String getnamn(){ return namn; public int getålder(){ return ålder; public boolean getkvinna(){ return kvinna; I olika sammanhang vill man nu kunna välja ut en delmängd av personer, t.ex. alla kvinnor mellan 18 och 25 år, eller alla män mellan 40 och 50 år. Er uppgift är att skriva en metod som gör ett sådant urval. Metoden skall ha fyra argument: En ArrayList<Person> som innehåller de personer som det skall väljas från En int som anger minsta ålder på de som skall väljas En int som anger högsta åldern på de som skall väljas En int som anger vilket kön de som skall väljas skall ha. Om argumentet är 1 så skall kvinnor väljas, är det 2 så skall män väljas, är det 3 så både kvinnor och män Metoden skall returnera en ArrayList<Person> innehållande de utvalda personerna. Argument-arraylistan skall vara oförändrad. OBS metoden som ni skriver måste ju i Java ligga inuti någon klass. Det kan ni ignorera i denna uppgift, det räcker alltså med själva metoden.