LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH 2007-12-18 TIN 211. DATAVETENSKAP Göteborg (2007-12-17) TENTAMEN



Relevanta dokument
Föreläsnings 11 - GUI, Händelsestyrda program, MVC

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Lösningsförslag till tentamen

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Lösningsförslag till tentamen

Lösningsförslag till tentamen

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

TENTAMEN OOP

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Föreläsning 3: Booleans, if, switch

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

PROGRAMMERINGSTEKNIK TIN212

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

TENTAMEN OOP

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Objektorienterad programmering i Java

Lösningar för tenta 3 DAT043,

Tentamen i Objektorienterad programmering

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

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

OOP Tentamen

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

Lösningsförslag till tentamen

ID1004 Laboration 3, 5-6 November 2012

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

Föreläsning 2, vecka 8: Repetition

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

Föreläsning 14: Grafik & mera händelsehantering

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Laboration 4: Game of Life

Lab5 för prgmedcl04 Grafik

Laboration 15 Grafiskt användargränssnitt

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen i Objektorienterad programmering E

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

DAT043 Objektorienterad Programmering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Tentamen i Objektorienterad programmering

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

OOP Tenta

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Rita Egna Bilder, Timer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Lösningsförslag till tentamen

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

TENTAMEN OOP

Lösningar till tentamen i EDAF25

Lösningsförslag tentamen FYTA11 Java

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Tentamen i Grundläggande programmering STS, åk 1 fredag

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Mer om grafiska komponenter. Händelsestyrda program

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

LÖSNINGSFÖRSLAG TENTAMEN

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen i Grundläggande programmering STS, åk 1 lördag

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

OOP Objekt-orienterad programmering

Föreläsning 3: Händelsestyrda program och användargränssnitt

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

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

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Tentamen i Programmering

Konstruktion av klasser med klasser

Examination i PROGRAMMERINGSTEKNIK F1/TM1 TIN212. Dag: Måndag Datum: Tid: (OBS 5 tim) Rum: V+M

Tentamen, EDAA20/EDA501 Programmering

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Laboration 24 Databasen MySQL och java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3-4 Innehåll

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Transkript:

DATAVETENSKAP Göteborg (2007-12-17) TENTAMEN CTH 2007-12-18 TIN 211 TENTAMEN I Programmeringsteknik F1 DAG: TISDAG TID: 14.00-18.00 SAL: M Ansvarig: Erland Holmström tel. 1007, hem 270358. Resultat: Anslås ej, meddelas via ladok. Lösningar: Anslås (eventuellt) på hemsidan samtidigt som resultatet är klart. Granskning: Tentan finns (efter anslagning av resultatet) på expeditionen där rättningen kan granskas. Tid för klagomål mot rättningen meddelas samtidigt som resultatet. Betygsgränser: Godkänd - 26p, 4-36p, 5-46p, max=60. (Siffror inom parentes anger maximal poäng på varje uppgift. I vissa fall ges även ungefärlig poängfördelning inom uppgiften.) Hjälpmedel: Horstmann Java Concepts eller Skansholm Java direkt om man läst kursen för Bondesson Var vänlig och läs detta: Börja med att läsa igenom HELA tesen så du kan ställa frågor när jag kommer. Observera att svar skall motiveras där så är lämpligt. Skriv läsligt! Rita gärna figurer. Svårlästa lösningar bedöms ej!! Börja varje uppgift på nytt blad. (Dock ej deluppgifter). Skriv endast på en sida av pappret. Skriv ditt (person)nummer på alla blad. Programmen skall vara skrivna i Java och vara indenterade och kommenterade. I de uppgifter där det spelar någon roll, antas att man kör under UNIX-operativsystem. De råd och anvisningar som givits under kursen skall följas vid programkonstruktionerna. Det innebär bla att onödigt komplicerade, långa och/eller ostrukturerade lösningar i värsta fall ej bedöms. Programmen skall skrivas som generella enheter som är lätta att förstå (för andra än skrivaren) och lätta att ändra i när förutsättningarna ändras. De skall dessutom uppfylla normala krav på objektorienterade komponenter. LYCKA TILL!!!

- 2 - Såväl svar som motivering måste vara rätt för poäng. Uppgift 1. a) Vad skrivs ut av följande programsnutt? Uppgift 2. public class Test { public static void main(string[] args) { // a1) boolean grabbed = false; if(grabbed=false) { System.out.println("Yes1"); else { System.out.println("No1"); // a2) boolean sunny = false; boolean rich = true; if (sunny) if (rich) System.out.println("Yes2"); else System.out.println("No2"); // end main b) Om du inte skriver en equals metod för en klass så tillhandahåller Java en. Var finns den och hur fungerar den? Sant eller falsk? Motivera. Det är normalfall som gäller, obskyra specialfall kan du bortse från. c) Uttrycket nedan kompilerar ok. (Antag att o inte deklarerats tidigare) Object o = new Integer(5); d) Uttrycket nedan evalueras till sant (new Integer(11) == new Integer(11)) e) En statisk medlemsmetod kan referera icke statiska variabler i samma klass men endast efter att en instans av klassen skapats. f) När ett objekt skickas som argumet till en metod så kan metoden ändra objektet. g) Nästan alla variabler initieras till nåt men det finns variabler som inte initieras. (Var deklareras dom i så fall?) (10p) Förklara detaljerat vad som sker varje varv i loopen nedan och vad som skrivs ut av programmet om första anropet till slump.nextint(20) ger talet 10? import java.util.*; public class Untitled { static Random slump = new Random(); public static void newnumbers() { for (int i = 0; i < (slump.nextint(20)); i++) { System.out.println("i= " + i); public static void main(string[] args) { newnumbers(); (4p)

- 3 - Uppgift 3. Uppgift 4. Vad skrivs ut av följande program? public class AnimalFarm { public static void main(string[] args) { final String pig = "length: 10"; System.out.println("All Animals are equal: " + pig==pig); (3p) Skriv ett program som ritar figuren nedan. När man drar i förstora-rutan så skall de två rectanglarna ändra storlek. Rita i en panel (dvs en klass för detta) och skriv ett huvudprogram som inte får ärva en Jframe (men du skall använda en såklart). Föredragen startstorlek skall vara 340x340. (8p) Uppgift 5. Ett positivt heltal N kallas lyckligt (happy) om följande förfarande leder till talet 1: Upprepa: N = summan av kvadraterna på siffrorna i N T ex är 440 ett lyckligt tal, eftersom 440 -> 16+16+0 = 32 -> 9 + 4 = 13 -> 1 + 9 = 10 -> 1 Uppenbarligen är 1 ett lyckligt tal. Positiva heltal som inte leder till 1 kallas olyckliga. De leder i stället till 4 som vid fortsatt iteration ger en cykel 4 -> 16 -> 37 -> 58 -> 89 - > 145 -> 42 -> 20 -> 4. a) Skriv en metod int sumofsqr(int n) som ger efterföljaren till n enligt processen ovan. Dvs resultatet skall vara summan av kvadraterna på siffrorna i n. Det får här och i fortsättningen förutsättas att resultatet är mindre än det största tillåtna heltalet. Metoden får inte vara rekursiv. b) Skriv en metod boolean ishappy(int n) som avgör om n är lyckligt eller ej. Det får förutsättas att antingen 1 eller 4 nås. Metoden får inte vara rekursiv. Utnyttja metoden ovan. c) Gör nu a) igen men nu skall metoden vara rekursiv. (sumofsqrrek) d) Gör nu b) igen men nu skall metoden vara rekursiv. (ishappyrek) e) Skriv ett fullständigt program som bestämmer och skriver ut antalet lyckliga tal mindre än 1000. Utnyttja metoderna ovan (a+b eller c+d), som naturligtvis inte behöver upprepas. (11p)

- 4 - Uppgift 6. Skriv ett litet minnesträningsprogram som när det startas visar upp ett fönster av formen: Fönstret skall ha titeln Memory Training. Överst skall finnas en text, som från början är Memory Training. Därunder finns en rad med fem knappar, som innehåller talen 0-4 i en slumpmässig ordning och utan dubbletter. Underst finns tre knappar. Den högra avslutar programmet. Den högra knappens har röd bakgrund, de övriga gul. Den mittersta gör att fönstret ser ut som vid programstart men med en ny slumpmässig blandning av siffrorna. Den vänstra döljer siffrorna. Programmet förväntar sig att användaren beter sig som följer (fusk kontrolleras inte): 1. Memorerar siffrornas placering. 2. Trycker på Hide, varvid siffrorna blir "osynliga". 3. Klickar successivt på sifferknapparna 0, 1, 2, 3 och 4 i rätt ordning. Om fel knapp trycks, skall texten ändras till Memory Fault (och användaren gå till nästa punkt). Om samtliga siffertangenter trycks ned korrekt skall texten i stället bli You Made It. 4. Trycker på New. Till din hjälp har du en färdig klass MTModel se slutet. Du skall använda M-V-C med klasserna MTControl, MTView och Main. Fonten skall vara Times, plain, 24 punkter. Antalet tal-knappar skall kunna varieras (se parametern till modellen). Dvs man skall kunna skapa spel med tex 10 tal att minnas så du kan inte skriva kod för en knapp i taget utan måste använda en loop till detta. (24p) import java.util.*; public class MTModel extends Observable { private int[] numbers; private int antal = 5; // default number of nbrs boolean gameover = false; private int actualposition = -1; private Random slump = new Random(); public MTModel(int antal) { this.antal = antal; numbers = new int[antal]; public void newnumbers() { gameover = false; actualposition = antal-1; for (int i = 0; i < antal; i++) { numbers[i] = i;

- 5 - // blanda int j, k; int temp; for (int i = 1; i <= antal; i++) { j = slump.nextint(antal); k = slump.nextint(antal); temp = numbers[j]; numbers[j] = numbers[k]; numbers[k] = temp; setchanged(); notifyobservers(new Integer(1)); public void trynumber(int number) { if (!gameover) { actualposition++; if ( actualposition==number ) { // correct choise if ( actualposition==antal-1 ) { gameover=true; setchanged(); notifyobservers(new Integer(2)); else { // ok spelet fortsätter setchanged(); notifyobservers(new Integer(3)); else { // wrong choise gameover=true; actualposition--; setchanged(); notifyobservers(new Integer(4)); public void hide(boolean hider) { gameover = false; // nu kan man börja om actualposition = -1; setchanged(); notifyobservers(new Integer(5)); // end hide public int[] getnumbers() { int[] tmp = new int[antal]; for( int i = 0; i < antal; ++i ) { if (numbers[i]<=actualposition) { tmp[i] = numbers[i]; else { tmp[i] = -1; return tmp; public int getantal() { return antal;

file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt U1 ============================================================ Korrekt Motivering och rätt svar krävs. (Inom parentes står ibland vad frågan testar) a1) (En luring faktiskt) (grabbed=false) är ett uttryck vars värde är false (grabbed tilldelas false och värdet av uttrycket är false) så det står alltså alltid if (false) vilket innebär "No1" a2) (Semantiken för if satsen) En else associeras alltid med sista if så indenteringen luras här. Det borde sett ut så här: if (sunny) if (rich) System.out.println("Yes2"); else System.out.println("No2"); eller ännu hellre med block så blir det otvetydigt if (sunny) { if (rich) { System.out.println("Yes2"); else { System.out.println("No2"); och eftersom sunny är false så blir det ingen utskrift alls. b) (2p) Den finns i klassen Object och den jämför om refrenserna är lika. (likhet) c) Ja det går bra. En Integer ärver ju Object dvs den är ett Object så en referens till ett Object kan också vara referens till en Integer. Operationerna på o är dock begränsade till de som finns på object om man inte typkonverterar. (Typer, polymorfism) d) Nej det är två olika heltal och referenslikhet kommer att ge false. new integer(11) är ett uttryck som returnerar en referens till en Integer vars värde är 11. 2 anrop ger olika referenser. (referens likhet, instansiering av objekt) e) Nej, statiska metoder kan aldrig* komma åt nåt i ett objekt. (*Här finns obskyra fall tex om en statisk metod instansierar ett objekt av sin egen klass så kommer den åt instansvariabler i det objektet) (semantik för klasser, objekt) f) Ja. Referensen till objektet kan inte ändras men det referensen pekar på kan ändras (och det är objektet det). (parameteröverföring) g) (2p) Ja. Variabler inuti metoder initieras inte. (semantik för variabler) U2 ============================================================= (Semantiken för for-loopen) Om man lägger in lite variabler så ser man tydligt vad som sker public static void newnumbers2() { int p; for (int i = 0; i < (p=slump.nextint(20)); i++) { System.out.println("i= " + i + " nextint= " + p); System.out.println("sista p= "+ p); Uttrycket i for loopen evalueras varje varv och då får man ett nytt slumptal varje gång. Det är alltså ganska osäkert vad som kommer att hända efter det första varvet, det beror på vad slumptalsgeneratorn ger för slumptal. Några anrop: % java MystiskLoop i= 0 nextint= 13 i= 1 nextint= 12 i= 2 nextint= 10 sista p= 0 % java MystiskLoop i= 0 nextint= 9 i= 1 nextint= 12 sista p= 0 % java MystiskLoop file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt (1 of 5)2008-01-26 14:50:17

file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt i= 0 nextint= 7 i= 1 nextint= 17 i= 2 nextint= 19 i= 3 nextint= 13 i= 4 nextint= 19 i= 5 nextint= 11 i= 6 nextint= 10 i= 7 nextint= 12 sista p= 7 U3 ========================================================= (Prioritetsordning på operatorer) Eftersom + operatorn har högre prioritet än == operatorn så beräknas först "All Animals are equal: " + pig till strängen "All Animals are equal: length 10" som naturligtvis inte är lika med strängen "length 10" så false skrivs ut. U4 ========================================================= Den här uppgiften är en blandning av test om ni läst/hittar i boken och av om ni kan mer än skriva av dvs kan göra enkla förändringar i det som står i boken. En stor skillnad mot bokens lösning är att rektanglarna skulle följa fönstrets storlek, en annan att man skulle använda en JPanel. Om man då trasslar in sig i användandet av både en JComponenet (som boken gör) och en JPanel så är man illa ute såklart för då har man inte förstått att dessa två är ungefär samma sak (i det här sammanhanget märks nog ingen skillnad alls). Sen svek mig mitt minne (jag borde ju kollat) när jag skrev att man inte fick ärva en JPanel, det skulle ju varit att man *måste* ärva en JPanel för att få lite skillnad även där men ingen blev väl lessen för det antar jag. Men poängen förskjuts naturligtvis från den del man kan skriva rakt av från boken. import java.awt.*; import javax.swing.*; public class Rect extends JPanel { private static int size = 300; public Rect() { setpreferredsize(new Dimension(size+40, size+40)); public void paintcomponent(graphics g) { super.paintcomponent(g); int width = getwidth(); //avsaknad av dessa ger -4p int height = getheight(); g.drawrect(10, 10, width-20, height-20); g.drawrect(20, 20, width-40, height-40); import java.awt.*; import javax.swing.*; public class Main { public static void main(string [] args) { //(4) JFrame frame = new JFrame(); frame.settitle("rektanglar"); frame.setlocation(50, 50); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().setlayout(new BorderLayout() ); Rect bx = new Rect(); frame.getcontentpane().add(bx, BorderLayout.CENTER); frame.setvisible(true); frame.pack(); U5 =========================================================== // Många alternativa lösningar är möjliga (och "rätt") men med strängar är det // svårt att få elegans här, speciellt i de rekursiva lösningarna. public class LyckligaTal { public static int sumofsqr(int n) { // n antas vara >=0 int sum = 0; file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt (2 of 5)2008-01-26 14:50:17

file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt while (n>0) { int ental = n%10; n = n/10; sum = sum + ental*ental; return sum; public static int sumofsqrrek(int n) { if ( n<=0 ) { return 0; else { int ental = n%10; return ental*ental + sumofsqrrek(n/10); public static boolean ishappy(int n) { int tmp = n; while ( tmp!=1 && tmp!=4 ) { tmp = sumofsqr(tmp); return tmp==1; public static boolean ishappyrek(int n) { if (n==1) { return true; else if (n==4){ return false; else { return ishappyrek(sumofsqrrek(n)); public static void main(string[] args) { int antal = 0; int start = 1; int slut = 1000; for(int i = start; i <= slut; ++i) { //if ( ishappy(i)!= ishappyrek(i) ) System.out.println("OOOps"); if ( ishappy(i)) { System.out.println(i + " är ett lyckligt tal"); // ej nödvändig antal = antal +1; System.out.println("Det finns " + antal + " stycken lyckliga tal mellan " + start + " och " + slut); U6 =========================================================== public class MemoryTrainingMain { public static void main(string[] s) { MTModel m = new MTModel(5); MTView v = new MTView(m); ========================================================== import javax.swing.*; import java.awt.event.*; public class MTControl implements ActionListener { MTModel m; public MTControl (MTModel m) { this.m = m; public void actionperformed(actionevent e) { if ( e.getactioncommand().equals("quit") ) { System.exit(0); else if ( e.getactioncommand().equals("newbe") ) { m.newnumbers(); file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt (3 of 5)2008-01-26 14:50:17

file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt else if ( e.getactioncommand().equals("hide") ) { m.hide(true); else if ( e.getactioncommand().equals("avsluta") ) { System.exit(0); else { // assume number buttons now int knapp = Integer.parseInt(butt.getActionCommand()); m.trynumber(knapp); // end actionperformed ========================================================== import java.awt.*; import javax.swing.*; import java.util.*; public class MTView extends JFrame implements Observer { private JButton[] siff; private JLabel heading = new JLabel("MemoryTraining", JLabel.CENTER); public MTView(MTModel m) { JButton show = new JButton("Hide"); JButton newbe = new JButton("New"); JButton quit = new JButton("Quit"); settitle("memory training"); setlocation(50, 50); setdefaultcloseoperation(jframe.exit_on_close); setlayout(new GridLayout(3,1,3,3)); // 3x1 med 3 pixlars avstånd Font font = new Font("Times", Font.PLAIN, 24); show.setfont(font); heading.setfont(font); quit.setfont(font); newbe.setfont(font); MTControl mtc = new MTControl(m); m.addobserver(this); int antal = m.getantal(); siff = new JButton[antal]; m.newnumbers(); int[] numbers = m.getnumbers(); JPanel buttnumbers = new JPanel(); buttnumbers.setlayout(new GridLayout(1, antal, 2, 2)); for (int i = 0; i < antal; i++) { siff[i] = new JButton("" + numbers[i]); siff[i].setactioncommand("" + numbers[i]); siff[i].addactionlistener(mtc); siff[i].setfont(font); siff[i].setforeground(color.black); siff[i].setbackground(color.yellow); buttnumbers.add(siff[i]); JPanel buttpanel = new JPanel(); buttpanel.setlayout(new GridLayout(1, 3, 2, 2)); show.setactioncommand("hide"); show.addactionlistener(mtc); show.setbackground(color.yellow); buttpanel.add(show); newbe.setactioncommand("newbe"); newbe.addactionlistener(mtc); newbe.setbackground(color.yellow); buttpanel.add(newbe); quit.setactioncommand("quit"); quit.addactionlistener(mtc); quit.setbackground(color.red); buttpanel.add(quit); add(heading); add(buttnumbers); add(buttpanel); pack(); setvisible(true); public void update(observable o, Object obj) { file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt (4 of 5)2008-01-26 14:50:17

file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt if (o instanceof MTModel) { MTModel m = (MTModel) o; int[] numbers = m.getnumbers(); int antal = numbers.length; int action = ((Integer) obj).intvalue(); // It better be switch ( action ) { case 1: // newnumbers heading.settext("memory Training"); for (int i = 0; i < antal; i++) { if (siff[i]!=null) { siff[i].settext("" + numbers[i]); siff[i].setactioncommand("" + numbers[i]); break; case 2: // trynumber, game over You won heading.settext("you Made It"); break; case 3: // game goes on for (int i = 0; i < antal; i++) { if (numbers[i] == -1) { siff[i].settext(""); else { siff[i].settext("" + numbers[i]); break; case 4: // wrong choise heading.settext("memory Fault, Start new game"); break; case 5: // hide heading.settext("ok lets try again"); for (int i = 0; i < antal; i++) { siff[i].settext(""); break; // end switch // end if // end update file:///d /Anton/Veckobladeriet/Blandat%20material/programmering_2007-12-18_losn.txt (5 of 5)2008-01-26 14:50:17