PRAKTISKT DELPROV I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH

Relevanta dokument
Objektorienterad programmering, Java, 5p TDBA63

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

TENTAMEN I DATAVETENSKAP

PROGRAMMERING I ETT OBJEKTORIENTERAT SPRÅK (JAVA), 5P

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

DELPROV2. Objektorienterad programmeringsmetodik (för ÖI), 7.5p 5DV081, 5DV090

DELPROV1. Objektorienterad programmeringsmetodik, 7.5p 5DV081, 5DV109

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Agenda. Objektorienterad programmering Föreläsning 13

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad programmering D2

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Tentamen TEN1 HI

Laboration 1: Figurer i hierarki

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper Laboration 2 GruDat, DD1344

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Övning 3. Datateknik A, Java I, 5 poäng

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

Tentamen, EDAA10 Programmering i Java

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Objektorienterad programmering i Java I

kl Tentaupplägg

DELPROV 1 I DATAVETENSKAP

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen, Algoritmer och datastrukturer

Programmering = modellering

kl Tentaupplägg

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

TDP Regler

Extentamen i 2D1359 Objektorinterad modellering programmering och analys Tisdag den 13 oktober 1998 kl

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. HT-15 Datum: Tid: kl

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen i Algoritmer & Datastrukturer i Java

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Arv och polymorfism i Java

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen TEN1 HI

TANA17 Matematiska beräkningar med Matlab

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

TDP Regler

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Classes och Interfaces, Objects och References, Initialization

Repetition av OOP- och Javabegrepp

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

TDDC30 Programmering i Java, datastrukturer och algoritmer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TENTAMEN OOP

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Föreläsning 9-10 Innehåll

Repetition av OOP- och Javabegrepp

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 3-4 Innehåll

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

ID1004 Laboration 4, November 2012

Malmö högskola 2007/2008 Teknik och samhälle

Introduktion till arv

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Föreläsning 5-6 Innehåll

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

OOP Tentamen

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 13 Innehåll

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen TEN1 HI

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Laboration 2: Designmönster

Objektorienterad Programmering (TDDC77)

Transkript:

UMEÅ UNIVERSITET Inst. för Datavetenskap 040116 PRAKTISKT DELPROV I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH PROGRAMMERING I JAVA, 5P Datum : 040116 Tid : 9-13 Hjälpmedel : Allt. Kommunikation med andra personer (direkt eller indirekt) är dock inte tillåten, som t ex via epost, mobiltelefon, gemensamma kataloger etc. Antal uppgifter : 4 Maxpoäng : 30 (halva poängtalet TP + PP krävs normalt för godkänt) Provet består av 4 uppgifter : 1 och 2 samt 2 fritt valda uppgifter bland 3,4,5,6 & 7. Kryssa för de uppgifter du lämnar in. Källkod skrivs ut i ett ickeproportionellt typsnitt (t.ex. courier). Namn, personnummer, användarnamn och sökvägen till filen/filarna skall finnas på all källkod. Skriv din dators namn på försättsbladet. Lösningarna skall vara snyggt och prydligt nedskrivna. Tankegången skall vara lätt att följa. Alla antaganden som inte är uppenbara skall redovisas. Den kod som ges i denna skrivning finns under länken pp040116 på kursens hemsida. Där finns också eventuella andra filer som du kan behöva. OBS! Kontrollera att din dator fungerar innan du börjar på allvar. Börja sedan med att läsa instruktionerna på nästa sida. Lycka till! UMEÅ UNIVERSITET 901 87 UMEÅ Tel.: 090-786 77 08 Fax: 090-786 61 26 e-mail: marie@cs.umu.se

Innan du börjar skall du göra följande: Logga in på Unix-systemet med hjälp av putty Gå till din katalog /edu/java: cd /edu/java Skapa en ny katalog: mkdir pp040116 Skydda katalogen: chmod R 700 pp040116 (obs stort R!) Efter provet, tidigast klockan 13.00: Logga in på Unix-systemet med hjälp av putty Gå till din katalog /edu/java: cd /edu/java Ändra filskyddet: chmod R 755 pp040116 Regler för det praktiska provet Detta är en del av examinationen och skall alltså ske under tentamensliknande förhållanden. Examinationen är individuell och betygsgrundande. Detta får följande konsekvenser : Man är personligt ansvarig för de lösningar som lämnas in. Om man hittar lösningar eller delar av lösningar på nätet eller i litteraturen bör detta tydligt anges och man är fortfarande skyldig att själv vara fullständigt insatt i den lösning man redovisar och på uppmaning kunna svara för innehåll och funktion i hela eller delar av lösningen. Självklart får man inte söka eller hämta kod från någon av de övriga tentanderna, detta betraktas som fusk och handläggs som sådant. Några riktlinjer för hur lösningarna bedöms : Koden skall följa god objektorienterad programmeringsmetodik, vilket t.ex. innebär konsekvent indenterad och lämpligt kommenterad källkod. Lösningen behöver inte gå att kompilera för att ge poäng, så låt inte troliga syntaxfel ta för mycket tid i anspråk om du känner dig övertygad om att du löst det givna problemet. Det räcker därför inte heller att en lösning fungerar för att ge full poäng, även här måste man på ett rimligt sätt underordna sig kravet på god programmeringsmetodik. Skärmdump - Screen shot Se filen screenshot.html i katalogen pp040116 för detaljer. 2(11)

Några viktiga UNIX kommandon: >pwd (PrintWorkingDirectory) Visar i vilken katalog du befinner dig. Kommandona nedan avser i huvudsak working directory, dvs. den aktuella mappen. >ls -al Listar alla filer i working directory tillsammans med olika uppgifter (t.ex. aktuella rättigheter). Om man bara skriver l istället för -al visas inte system-filerna (sådana vars namn börjar med en punkt). >cd katalog Flyttar ner i den angivna katalogen. Man kan flytta flera nivåer på en gång genom att ange vägen katalog/ katalog/ katalog. Om du inte vet var du är, kan du använda pwd (se ovan) för att vara säker. >chmod [-R] mode katalog/fil Ändrar rättigheter på katalog/fil till de rättigheterna som anges i "mode". Rättigheterna visas (via ls -l) som tre grupper med rwx, där r står för läsrättighet, w för skrivrättighet och x för rättigheten att exekvera filen. Första gruppen rwx anger rättigheterna för ägaren av filen. Andra gruppen rwx anger vilka rättigheter för andra personer i samma grupp som ägaren (i vårt fall är det studenterna på datavetenskap). Tredje gruppen anger rättigheterna för övriga (här finns institutionens personal). Viktiga "mode" är t.ex. 700 då ändras rättigheterna till rwx------, dvs bara ägaren får läsa, skriva och exekvera. Ingen annan får läsa, skriva eller exekvera (inte ens lärarna). 755 då ändras rättigheterna till rwxr-xr-x, dvs bara ägaren får läsa, skriva och exekvera. Gruppen (studenterna på kursen) och övriga världen får läsa och exekvera. Om man anger -R (kan alltså utelämnas) ändras rättigheterna rekursivt i alla filer och kataloger som ligger under den katalogen som anges. >mkdir katalognamn Skapar en ny mapp i working directory, dvs. den aktuella mappen. 3(11)

Uppgift 1 (5 poäng) När man arbetar med grafik använder man sig av en del linjär algebra för att kunna manipulera figurer. En punkt representeras ofta som en matematisk vektor, eftersom den har riktning och längd. Detta för att man t.ex. skall kunna förstora/förminska, flytta, rotera objekt som byggs upp av ett större antal punkter. I det här sammanhanget låter vi punkterna ha en x- och en y-koordinat som relateras till origo (0,0). Din uppgift är att modellera sådana punkter/vektorer. Konstruera en klass, vars objekt kan representera vektorer i planet. Detta innebär att man måste kunna ge punkten nya värden på x- och/eller y-koordinaten en punkt ska kunna adderas med en annan och som resultat returnera en ny punkt man ska kunna fråga vektorn om dess längd (2-normen, den Euklidiska, som beräknas med Pythagoras sats) y 10 9 8 c=(7,8) 7 6 5 a=(2,5) c=a+b 4 3 2 1 b=(5,3) 0 0 1 2 3 4 5 6 7 8 9 10 x I detta exempel är a = (2,5), b = (5,3) och c = a + b = (7,8). Längden för c blir då c 2 ª10.63. 4(11)

Uppgift 2 (5 poäng) Taxibolaget SnabbaBullen funderar på att etablera sig i Umeå och vill utföra en studie av lönsamheten. Därför vill man att du konstruerar ett system för att modellera verksamheten som man sedan ska kunna använda för att göra en simulerad studie. Som underlag får du följande beskrivning: Företaget har två typer av tjänster, taxiresor för enstaka individer samt transfertjänster, som t.ex. hämta en större grupp på flygplatsen för körning till olika adresser. När företaget får ett telefonsamtal från en individ, ett hotell, en nöjesinrättning eller turistorganisation försöker man lägga ut körningen på lediga fordon. Man tillämpar ingen typ av kösystem. Det innebär att om alla bilar är upptagna meddelar växeln att kunden måste ringa senare. Föraren meddelar taxiväxeln när han/hon når sin hämtningsplats för att plocka upp en passagerare. På samma sätt rapporteras när körningen är avslutad. Systemet skall lagra detaljer om körningar som inte kan utföras pga. att inga lediga bilar finns. Det ska också vara möjligt att ta fram information om hur mycket tid fordonen avsätter på följande aktiviteter: passagerartransport, resor till upphämtningsplats och väntan på uppdrag. 5(11)

I den följande delen får du lämna in högst två av uppgifterna Uppgift 3 ( 5 poäng) Antag att vi har en klass List som implementerar en lista med följande metoder: public List() Skapar en ny tom lista public boolean isempty() Returnerar true om listan är tom public Pos first() Returnerar första positionen i listan public Pos end() Returnerar sista positionen i listan public Pos next(pos p) Returnerar positionen efter p i listan public Pos previous(pos p) Returnerar positionen före p i listan public Pos insert(object v, Pos p) Stoppar in objektet v före positionen p i listan och returnerar positionen för det nya värdet i listan public Object inspect(pos p) Returnerar objektet som finns på position p i listan public Pos remove(pos p) Tar bort elementet på position p ur listan Skriv en klass Stack som med hjälp av klassen List implementerar en stack. Den ska ha följande metoder: public Stack() Skapar en tom stack public boolean isempty() Returnerar true om stacken är tom, annars false public void pop() Ta bort översta elementet från stacken public void push(object item) Stoppar objektet item överst på stacken public Object top() Returnerar objektet som ligger överst på stacken utan att ta bort det OBS! Du måste använda dig av klassen List när du implementerar stacken (att kopiera lösningen från LL4 fungerar alltså inte). Klassen List och dess hjälpklass Pos finns i katalogen pp040116 tillsammans med stommen till klassen Stack. 6(11)

Uppgift 4 (3+3=6 poäng) I denna uppgift skall du skriva en klass Converter som innehåller två statiska metoder. Båda ska omvandla ett decimaltal till ett binärt tal och returnera det som en sträng. Den första metoden ska lösa problemet iterativt och den andra ska lösa det rekursivt. Algoritm för omvandling av ett decimalt tal till ett binärt tal Låt D vara det decimala tal som ska översättas till det binära talet b n...b 1 b 0. 1. Heltalsdividera D med 2 och låt detta vara ett nytt värde på D. 2. Låt bi vara lika med resten vid heltalsdivisionen i punkt 1 (Första gången är index i = 0). 3. Öka i med ett och upprepa algoritmen tills D = 0. Denna algoritm illustreras i ett exempel. Exempel: Omvandling av ett decimalt tal till ett binärt tal Det decimala talet 37 översätt till binär form med hjälp av den ovan givna algoritmen. 37 / 2 = 18 rest 1 --> b 0 = 1 18 / 2 = 9 rest 0 --> b 1 = 0 9 / 2 = 4 rest 1 --> b 2 = 1 4 / 2 = 2 rest 0 --> b 3 = 0 2 / 2 = 1 rest 0 --> b 4 = 0 1 / 2 = 0 rest 1 --> b 5 = 1 Det binära talet läses nerifrån och upp. Det blir alltså 100101. OBS! Detta är enbart en generell algoritm. Metoderna ska returnera det binära talet (i rätt ordning) som en sträng! Uppgift 5 ( 5 poäng) En av de obligatoriska uppgifterna baseras på ett problem kallat PacMan 1. Där förekommer ett antal figurer: mat, väggar/hinder och sådana som rör sig (PacMan och spöken). En tänkbar organisation av dessa är 1 Se http://www.cs.umu.se/kurser/tdba63/ht03/crc2.htm ) för detaljerad information 7(11)

Figure <abstract> Klassen Figure har attribut för poäng, position och färg samt ett antal metoder enligt klassdiagrammet här bredvid(se även koden i mappen pp040116 från websidan). int points int xpos int ypos Color color + Figure(int xpos, int ypos) - moveabs(int absx, int absy) + int getpoints() boolean isedible() <abstract> boolean isobstacle() <abstract> Om vi tittar på hierarkien för maten : Från Figure härleder man en abstrakt klass Food som definierar de abstrakta metoderna från Figure. Den har i det här exemplet inga ytterligare attribut eller metoder jämfört med Figure. De olika matsorterna kan skilja sig åt på flera sätt, men här låter vi det stanna vid att de har olika poäng, kex är värda 10p, skinka är värd 15p och ost är värd 20p (när de äts upp av PacMan). [Allt som rör figurernas visuella representation och hantering har skalats bort i detta exempel.] Din uppgift blir att implementera den härleda abstrakta klassen Food och den härledda klassen Cheese. Uppgift 6 (10 poäng) En nxn matris som är fylld med talen 1, 2, 3 n 2 kallas för magisk kvadrat om summan av talen i varje rad, i varje kolumn, och i de två diagonalerna är lika. È 16 3 2 13 5 10 11 8 Exempel när n=4: 9 6 7 12 Î 4 15 14 1 Det finns en enkel algoritm som genererar magiska nxn kvadrater, men den fungerar bara när n är udda. Algoritmen placerar i tur och ordning ut talen 1, 2, 3 n 2. Den generella regeln är: efter att talet k har placerats i en viss ruta, placera k + 1 i rutan ett steg till höger och ett steg nedanför ruta k. 8(11)

Detta görs på följande sätt: Placera talet 1 i mitten av nedersta raden. Följ den generella regeln för alla övriga heltal, 2, 3 n 2. Två situationer som kräver undantag från regeln kan inträffa: 1. Om den aktuella rutan ligger utanför kvadraten, så betraktas kvadratens kanter som sammankopplade. 2. Om den nya rutan redan är fylld, eller om man befinner sig i det nedre högra hörnet, då ska det nya talet k + 1 istället placeras i rutan som ligger direkt ovanför ruta k. Exempel för n=3 k Vad händer? Resulterande Matris 1 Placera 1 i mitten i den nedersta raden 2 3 4 Rutan ett steg till höger och ett steg nedanför hamnar utanför kvadraten. Då betraktar man den första raden som ihopkopplad med den sista. (situation 1) Rutan ett steg till höger och ett steg nedanför hamnar även nu utanför kvadraten. Då betraktar man den första kolumnen som ihopkopplad med den sista. (situation 1) Rutan ett steg till höger och ett steg nedanför är nu redan upptagen. Då använder vi rutan ovanför istället. (situation 2) 5,6 Den generella regeln fungerar direkt. 7 8 9 Vi befinner oss längst ned i högra hörnet och använder rutan ovanför istället. (situation 2) Rutan ett steg till höger och steg nedanför hamnar utanför kvadraten. Koppla sista kolumnen till den första. (situation 1) Rutan ett steg till höger och steg nedanför hamnar utanför kvadraten. Sista raden kopplas ihop med den första. (situation 1) È 4 _ 2 3 5 _ Î _ 1 _ È _ _ Î _ 1 _ È 2 _ Î _ 1 _ È 2 3 Î _ 1 _ È 4 _ 2 3 Î _ 1 _ È 4 _ 2 3 5 _ Î _ 1 6 È 4 _ 2 3 5 7 Î _ 1 6 È 4 _ 2 3 5 7 Î 8 1 6 È 4 9 2 3 5 7 Î 8 1 6 9(11)

Om n=5 ger ovanstående algoritm: È 11 18 25 2 9 10 12 19 21 3 4 6 13 20 22 23 5 7 14 16 Î 17 24 1 8 15 Din uppgift är att implementera en statisk metod makemagic som tar ett heltal n som parameter och returnerar en magisk kvadrat med sidan n enligt ovanstående algoritm. Som en del av testningen av din implementation kan du använda metoden ismagic från föreläsningen F9&F10. Koden finns i mappen pp040116. Uppgift 7 (4+6 = 10 poäng) I den här uppgiften ska du komplettera en implementation av ett Pokerspel. Du får två klasser givna Poker och CardDeck dessa filer finns i katalogen pp040116 på kurshemsidan. Din uppgift är att implementera klasserna Card och Hand så att det går att skapa ett objekt av klassen Poker och sedan köra metoden printfacts. I UMLdiagrammet nedan ser du hur klasserna hänger ihop. Poker - CardDeck deck - int numofplayers - Hand[] hands + Poker() + Poker(int numofplayers) + printfacts() + String tostring() 1..* Hand // Attribut + Hand(int nocards, CardDeck d) // Ytterligare metoder CardDeck - final int NUMOFCARDS - boolean[] cards - int cardsleft + CardDeck() + Card drawcard() Card // Attribut 1..* + Card(int suit, int value) + int compareto(card c) + String tostring() // Ytterligare metoder Poker Ett objekt av klassen Poker har en kortlek och ett antal spelare (4 som default). Dessutom finns där en hand för var och en av spelarna som innehåller fem kort. Koden som ni får är början på en pokerspelande klass som just nu bara kan skapa ett pokergäng och sedan skriva ut fakta (med printfacts) om vad var och en av spelarna har på sin hand. Dvs tala om vilka som har ett par, triss, färg, stege etc. Koden för denna klass får inte ändras på något sätt. 10(11)

CardDeck En kortlek består av 52 kort (objekt av klassen Card) och har som sitt enda beteende att dra ett slumpmässigt kort ur leken. För varje gång ett kort dras ur leken så är det borta ur leken och kan inte dras igen. Koden för denna klass får inte ändras på något sätt. Card (4 poäng) I en vanlig kortlek finns 52 kort som har en av fyra färger (Hjärter, Klöver, Spader eller Ruter) och en av 13 olika valörer (1=Ess, 11=Knekt, 12=Dam och 13=Kung). Om ni läser koden för CardDeck som finns på kurshemsidan så ser ni att Card måste ha en konstruktor som tar färg och valör som heltalsparametrar. Förutom detta ska ett kort gå att jämföra med ett annat kort, detta sker med hjälp av metoden compareto som ska fungera så här 2 : Om valören på ett Card-objekt ska jämföras med valören på ett annat Card-objekt får man tre fall Om valören för det aktuella objektet är mindre än objektet man jämför med ska -1 returneras. Om objektens valörer är lika returnera 0. Om det aktuella kortets valör är större än det man jämför med returnera 1. Utöver dessa två metoder ska också en tostring-metod implementeras som beskriver kortet i en sträng. Du bestämmer själv hur kortet ska representeras och får även implementera ytterligare metoder om det behövs. Hand (6 poäng) En hand innehåller ett godtyckligt antal kort och från den givna koden för Poker ser vi att det måste finnas en konstruktor som tar antalet kort samt en kortlek (CardDeck) som parametrar. Utöver det behövs det också metoder som undersöker handen. Vilka dessa är syns i metoden printfacts i Poker. Det behövs också en tostring som returnerar information om alla kort som finns på en hand som en sträng. Du bestämmer själv hur handen ska representeras och får även implementera ytterligare metoder om det behövs. 2 Vill man kan man implementera interfacet Comparable. 11(11)