6.5 Spelserien Gissa tal

Storlek: px
Starta visningen från sidan:

Download "6.5 Spelserien Gissa tal"

Transkript

1 6.5 Spelserien Gissa tal Här introduceras ett litet enkelt spel som i fortsättningen kommer att utvecklas steg för steg över flera kapitel. I varje version av det kommer vi att lära oss ett nytt koncept. Låt oss kalla det för Gissa tal : Användaren ska gissa fram ett hemligt tal inom ett visst intervall. Talet är hårdkodat i de första och slumpat i de senare versionerna av spelet. Som hjälp får användaren reda på inom vilket intervall talet ska ligga samt om det gissade talet var mindre än, större än eller lika med det hemliga talet. För att kunna ge den hjälp användaren behöver, måste programmet vid varje gissning välja bland dessa tre alternativ. Därför är Gissa tal -spelet programmeringstekniskt ett exempel på ett trevägsval. Tänkbara utvecklingssteg är: Till att börja med kan det hemliga talet vara en hårdkodad konstant. Sedan kan man gå över till att använda Javas slumptalsgenerator för att förse hemliga talet med slumptal i ett önskat intervall. Så lär vi oss på köpet hanteringen av slumptal i Java. Önskemålet att kunna upprepa gissningarna tills man gissat rätt och genomföra flera spelomgånger leder till att skriva repetitioner (loopar) i Java. För att kontrollera loopars korrekta avslutning behöver man kunskaper i logik som vi ägnar oss åt i nästa kapitel. Slutligen kommer vi att skriva spelet som en klass. Vi börjar med att lösa problemet med: Nästlad if-else Denna nästlade kontrollstruktur kan tänkas både som alternativ och komplement till switch-satsen för att koda flervägsval. Vi kommer att lära oss båda möjligheter. Men först ska vi använda den för att få fram den första versionen av Gissa tal -spelet: // GuessIfElse.java // Flervägsval med nästlad if-else-sats import javax.swing.joptionpane; class GuessIfElse public static void main(string[] a) int gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett tal mellan 1 och 20")); if (gissat <= 17) if (gissat == 17) System.out.print('\u0007'); // datorljud JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); else JOptionPane.showMessageDialog(null, "För litet!"); else JOptionPane.showMessageDialog(null, "För stort!"); 152

2 Programmet ovan läser in ett tal, avgör om det är mindre, lika med eller större än 17 och skriver ut det. Så här kan tre typiska körningar se ut för de tre olika alternativen: Samtidigt kommer programmet GuessIfElse producera datorljudet när man gissat rätt pga escapesekvensen \u0007 skickas till konsolen om det inmatade tal som läses in till variabeln gissat, är 17. Men låt oss titta hur den nästlade strukturen ser ut: if (gissat <= 17) if (gissat == 17) Inre... Yttre else... else... Vi har en inre if-else-sats som är nästlad i if-delen av en yttre if-else-sats. Den yttre if-else-satsen behandlar de två grupperade alternativen <= 17 i if-delen och alternativet > 17 i else-delen. Den inre if-else-satsen tar hand om gruppen, splittrar upp den i sina beståndsdelar < 17 och == 17, behandlar == 17 i if-delen och < 17 i else-delen. På så sätt återförs trevägsvalet till två tvåvägsval som var och en löses med en if-else-sats. Man anar hur komplexiteten växer med större antal alternativ. För att inte råka ut för det s.k. luriga-else-fenomenet så kallas det när något else paras med fel if låter vi alla else hitta rätt if genom att skriva if-else alltid som par och inte hoppa över något else. Regeln är nämligen att else automatiskt paras till närmaste if. Man kan jämföra det med parenteser i ett uttryck: Öppnar man en parentes med if måste man även stänga den med else. 153

3 switch med tomma case-satser Visst kunde vi lösa trevägsvalet i programmet GissaIfElse med nästlad if-else-sats (sid 152). Men var det optimalt? Kan man inte utnyttja den klarare strukturen hos switch för att behandla trevägsvalet i Gissa tal och liknande flervägsval med större antal alternativ? Jo, det går: När en likhet inträffar utför switch-satsen alla satser som följer efter case ända tills break kommer eller switch-satsen avslutas. Utnyttjar man denna möjlighet genom att skriva tomma case-satser och utelämna break, kan man med switch lösa flervägsval med olikheter dvs jämförelser med <, <=, > och >=. Följande program demonstrerar denna möjlighet: // GuessSwitchEmp.java // Gissa tal-spelet med switch-satsen // Tomma case-satser utan break: flervägsval med olikheter import javax.swing.joptionpane; class GuessSwitchEmp public static void main(string[] a) int gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett " + "tal mellan 1 och 10")); switch (gissat) case 1: // Fem tomma case-satser case 2: // utan break: case 3: // gissat = 1, 2, 3, 4, 5, 6 case 4: case 5: case 6: JOptionPane.showMessageDialog(null, "För litet!"); break; case 7: // gissat = 7 System.out.print('\u0007'); JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); break; case 8: // gissat = 8, 9, 10 case 9: case 10: JOptionPane.showMessageDialog(null, "För stort!"); break; default: JOptionPane.showMessageDialog(null, "Du gissade tal utanför intervallet [1, 10]\n\n"); 154

4 Programmet ovan ger exakt samma resultat (sid 153) som programmet GuessIfElse. För alla inmatningar 1-6 skrivs ut För litet! Inmatningen 7 ger Grattis, du har gissat rätt! Matar man in 8-10 får man utskriften För stort! Alla andra inmatningar ger ett lämpligt fel meddelande. För att koden inte ska bli alltför stor har vi hållit oss till intervallet Man kan alltså gruppera flera case-satser till ett fall genom att rada upp dem efter varandra, utelämna break och i den sista skriva det som skall utföras i just detta fall. I den sista får break förstås inte utelämnas, annars fortsätter programflödet till default-del och utför dessutom alla satser som står där. Kombination av switch och if-else Även om tomma case-satser löser trevägsvalet med olikheter, är det ju inte precis någon elegant lösning att rada upp en massa case utan innehåll, särskilt om man skulle vilja utvidga gissningsintervallets storlek. Alternativt kan problemet lösas med en kombination av switch för if-else. Då det gäller att skilja mellan de tre alternativen lika med, större än och mindre än 17 kan switch-satsen testa likheten i en case-sats. När det är gjort, har man reducerat trevägsvalet till ett tvåvägsval mellan större än och mindre än. Tvåvägsvalet tar sedan hand om fallen större än och mindre än i en vanlig if-else-sats som kan placeras i switch-satsens default-del. case-satsen behandlar alltså ett fall och default-satsen de två andra fallen. Så här kan det se ut: // GuessSwitch.java // Gissa tal-spelet med kombinerad med if-else // Reduktion av trevägsval till tvåvägsval import javax.swing.joptionpane; class GuessSwitch public static void main(string[] a) int gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett tal mellan 1 och 20")); switch (gissat) case 17: System.out.print('\u0007'); // datorljud JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); break; default: if (gissat < 17) JOptionPane.showMessageDialog(null, "För litet!"); else JOptionPane.showMessageDialog(null, "För stort!"); 155

5 Programmet ovan ger exakt samma resultat (sid 153) som programmet GuessIfElse. Kombinationen av de två kontrollstrukturerna switch och if-else leder till en avsevärt förenkling och klarhet av koden. Även denna kombination är förstås en slags nästling: if-else-satsen är nästlad i switch-satsen. Men nästlingen här innebär mindre komplexitet än hos den nästlade if-else-satsen. Enkelheten och klarheten i strukturen motiverar användningen av default-satsen på ett okonventionellt sätt. Den egentliga fördelen med den här lösningen är att man tillämpat idén att bryta ned ett stort, svårt problem (trevägsval) till ett mindre, enklare problem (tvåvägsval) vars lösning redan är känd en metodik som med fördel kan användas även i andra sammanhang. I matematiken är det vanligt att bevisa nya satser (stora, svåra problem) med hjälp av redan kända satser (mindre, enklare problem). I programmeringen kallar man metoden för modularisering och använder den för att bryta ned stora program till mindre moduler och sätta ihop dem sedan enligt Lego-principen. Här har tvåvägsvalet brytits ned till två enkla tvåvägsval. Idén om modularisering förverkligas på ett mer genomgripande sätt när man skriver klasser och metoder. 156

6 6.6 Efter-testad repetition: do-satsen Datorn har några egenskaper som är helt överlägsna motsvarande egenskaper hos människan: snabbheten, noggrannheten och förmågan att effektivt lagra och hantera stora datamängder samt förmågan att inte bli trött. Datorn kan upprepa en sak miljardtals gånger utan att tappa i noggrannhet. Denna förmåga utnyttjas i stor skala av alla möjliga datorprogram. Och därför har man en speciell kontrollstruktur i algoritmer som beskriver den: repetitionen *. Att låta datorn göra grovjobbet innebär som regel att datorn utför en repetition. Beroende på hur repetitionen, speciellt hur avslutningsvillkoret formuleras och var det placeras, skiljer man mellan tre olika typer av repetition: Efter-testad repetition För-testad repetition Bestämd repetition Efter-testad repetition Det är en upprepningsslinga även kallad loop där avslutningsvillkoret testas efter slingans instruktioner dvs efter det som egentligen ska upprepas. Så här kan den formuleras i pseudokod och som flödesplan: Pseudokod Flödesplan REPETERA instruktion(er) SÅ LÄNGE villkor uppfyllt Instruktion(er) Loop Villkor sant falskt I Java inleds den efter-testade repetitionen med det reserverade ordet do: do sats(er); while (villkor); Första raden är do-satsens huvud och får inte avslutas med semikolon. Resten är do-satsens kropp som består av ett block (sid 140). Om kroppen består endast av en sats kan klamrarna och utelämnas. Till skillnad från if-satsen kan här kroppens avslutande klammer inte ersätta do-satsens avslutande semikolon, eftersom do-satsen inte är kom- * I några böcker kallas det för iteration. En besläktad term är rekursion som behandlas på sid 266. Vi undviker båda dessa termer, för att undvika missförstånd, eftersom de används i annan kontext. 157

7 plett utan fortsätter med villkoret. Och villkoret kan bara testas när det som vanligt skrivs inom vanliga parenteser som följer det reserverade ordet while. Först efter villkoret är do-satsen komplett vilket bekräftas med det avslutande semikolonet. Med hjälp av den nya kontrollstrukturen efter-testad repetition ska vi nu skriva en dosats. Som applikation tar vi Gissa tal för att vidareutveckla det. Den stora nackdelen av alla tre versioner hittills var att man inte kunde gissa flera omgånger utan var tvungen att köra om programmet för att gissa vidare. Följande program använder en do-loop för att kunna köra programmet tills man gissat rätt: // GuessDo.java // Gissa tal-spelet i dialog med do-loop import javax.swing.joptionpane; class GuessDo public static void main(string[] a) int gissat; do // do-loopen börjar gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett tal mellan 1 och 20")); switch (gissat) case 17: System.out.print('\u0007'); // datorljud JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); break; default: if (gissat < 17) JOptionPane.showMessageDialog(null, "För litet!"); else JOptionPane.showMessageDialog(null, "För stort!"); while (gissat!= 17); // do-loopen slutar do-satsen är en lämplig variant av repetition när det gäller att åstadkomma en dialog mellan datorn och användaren. I GuessDo inleds dialogen med inläsning av gissat. Sedan tar switch-satsen hand om valet mellan tre alternativ, nämligen om det gissade talet är lika med, mindre än eller större än spelets hemliga tal 17. I slutet testas om gissat är skilt från 17. Om så är fallet, återvänder programflödet till början av do-blocket och allt upprepas tills gissat någon gång blir lika med

8 I do-satsen utförs satserna första gången oavsett om villkoret är sant eller falskt. Sedan testas villkoret: är det sant upprepas satserna. Sedan testas villkoret igen: är det fortfarande sant, fortsätts repetitionen osv. Är villkoret falskt, stoppas repetitionen. Man kan alltså säga: dörrvakten (villkoret) står vid utgången till lokalen (slingan). Konsekvensen blir att, när villkoret är falskt från början, kommer satserna i alla fall att utföras åtminstone en gång. I nästa avsnitt behandlas en annan variant av repetition, den för-testade repetitionen där dörrvakten så att säga står vid ingången till lokalen och inte tillåter att någon sats exekveras när villkoret är falskt från början. Är villkoret sant hela tiden, kommer slingan att snurra i all evighet. Därför kallas den evighetsslinga (sid 163). En körning av GuessDo kan ge en dialog med datorn av den typ som programmet GuessIfElse visade med samma resultat (sid 153). Skillnaden är att vi då fick köra programmet en gång för varje gissning, medan nu kan vi göra flera gissningar vid endast en körning. Programmet avslutas först när vi hittat det hemliga talet. Det är avgörande att skilja mellan repetition och selektion. I selektionens pseudokod har vi nyckelordet OM och i Java det reserverade ordet if, vilket innebär ett val en enda gång, dvs ingen upprepning alls. I repetitionens pseudokod har vi SÅ LÄNGE och i Java det reserverade ordet while, vilket innebär att villkoret testas upprepade gånger. I selektionens flödesplan går allt flöde endast framåt dvs alla pilar nedåt, se sid 135, 143 och 146. I repetitionens flödesplan ovan går pilen efter instruktionerna tillbaka till villkoret för att testa det igen. Orsaken till att programflödet går tillbaka är att det finns en hoppats inbyggd i alla repetitioner som skickar programflödet tillbaka till loopens villkor. Ett annat sätt att se på efter-testad repetition är att i pseudokoden (sid 164) använda nyckelordet TILLS istället för SÅ LÄNGE. Så kan logiken ibland uppfattas enklare: REPETERA instruktion(er) TILLS villkor inte uppfyllt Om man väljer samma villkor som i formuleringen med SÅ LÄNGE, dvs bibehåller villkorets formulering, måste man negera villkoret när man går över till TILLS. Det beror på skillnaden i den logiska innebörden av SÅ LÄNGE och TILLS. I flödesplanen av den eftertestade repetitionen blir det ingen strukturell ändring, bara man sätter sant och falskt på de logiskt korrekta utgångarna av villkoret. I Morgonsyssla-algoritmen (sid 20-24) finns exempel på en efter-testad repetition med just TILLS-formuleringen. Hantering av slumptal En nackdel av programmet GuessDo är att det hemliga talet är hårdkodat som 17. Det skulle innebära en väsentlig förbättring av Gissa tal om programmet kunde generera ett slumptal mellan 1 och 20 som hemligt tal varje gång man körde det. Därför öppnar vi här en liten parentes om slumptal och deras hantering i Java. Generellt kan man med datorn som en deterministisk maskin inte producera äkta slumptal utan endast simulera dvs på något sätt beräkna s.k. pseudoslumptal enligt en 159

9 viss algortim. Överallt vi pratar om slumptal menar vi egentligen pseudoslumptal. I Java kan man simulera slumptal på olika sätt, bl.a. med metoden random() som är definierad i klassen Math. Denna metod returnerar slumptal av typ double mellan 0 och 1, närmare bestämt från och med 0 till, men inte med 1, dvs: 0 <= Math.random() < 1 För att skräddarsy random() för vårt ändamål, att få slumptal mellan 1 och 20 utförs en skalning med faktor 20, en typkonvertering till int och en skiftning med 1: 1 + (int) (Math.random() * 20) Följande program testar både Math.random() och transformationen till [1, 20] samt producerar utskriften i rutan till höger: // DoRand.java // Skriver ut 4 slumptal mellan 0 och 1 och 4 mellan 1 och 20 import javax.swing.joptionpane; class DoRand public static void main(string[] a) int i = 1, j = 1; String output = "Math.random() ger slumptal\n" + "mellan 0 och 1:\n\n"; do // do-loop output += Math.random() + "\n"; while (++i < 5); // i ökar först, testas sedan output += "\n1 + (int) (Math.random() * 20)\n" + "ger slumptal mellan 1 och 20:\n\n"; do // do-loop output += 1 + (int) (Math.random() * 20) + "\n"; while (++j < 5); // j ökar först, testas sedan JOptionPane.showMessageDialog(null, output, "Slumptal", 1); Skalningen Math.random() * 20 förstorar slumpvärdena och ger decimaltal från och med 0 till, men inte med 20. Typkonvertering till int ger heltal mellan 0 och 19. Skiftningen är en förskjutning av intervallet [0, 19] med +1 till [1, 20]. Det hela är en transfor- 160

10 mation som kan generaliseras: Vill man ha slumptal mellan a och b där a < b, kan man transformera decimaltal mellan 0 och 1 till heltal mellan a och b så här: a + (int) (Math.random() * (b-a+1) Två olika do-satser i DoRand tar hand om slumptalen i olika intervall. All utskrift ackumuleras i variabeln output och dumpas till utskrift i programmets sista sats (sid 88). Gissa tal med slumptal Resultatet från DoRand kan vi nu använda i följande version av Gissa tal för att slumpa fram det hemliga talet varje gång vi kör och kunna spela tills vi gissat rätt: // GuessDoRand.java // Gissa tal-spelet med slumptal som hemligt tal i dialog med do import javax.swing.joptionpane; class GuessDoRand public static void main(string[] a) int gissat; int hemligt = 1 + (int) (Math.random() * 20); do gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett tal mellan 1 och 20 (Avsluta med 0)")); if (gissat == 0) JOptionPane.showMessageDialog(null, "Programmets " + "hemliga tal var " + hemligt, "Avbrott", 1); break; // Bryter do-loopen if (gissat == hemligt) System.out.print('\u0007'); // datorljud JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); break; // Bryter do-loopen if (gissat < hemligt) JOptionPane.showMessageDialog(null, "För LITET, försök igen!"); else JOptionPane.showMessageDialog(null, "För STORT, försök igen!"); while (gissat!= hemligt); 161

11 Spelet har förbättrats i två avseenden: För det första bestäms programmets hemliga tal inte längre redan i koden utan slumpas fram med metoden Math.random(). För det andra kan man avsluta innan man hunnit gissa rätt: Man matar in 0. Programmets första if-sats bryter då do-loopen med hjälp av break. När vi behandlade switch-satsen sade vi att break är ett reserverat ord som bryter programflödet även i loopar (sid 150). Och det är precis vad den gör här. break bryter do-satsen utan att testa do-satsens avslutningsvillkor (gissat!= hemligt) som i regel dvs när break inte utförs kommer till användning och avslutar dialogen när man gissat rätt. Annars fortsätter dialogen så länge man gissar fel. Frågan som dyker upp när man tittar på koden i programmet GuessDoRand, är: Varför används inte längre switch i kombination med if-else som i den senaste versionen av Gissa tal hade gett bra resultat. Vi hade helst velat göra det. Men övergången till slumptal gör att slumptalet måste lagras i en variabel i det här fallet hemligt och switch-satsen inte tillåter jämförelse med en variabel. I spelets första versioner var programmets hemliga tal hårdkodat som konstanten 17 och switch kunde jamföra väljaren gissat med denna konstant. Men nu lagras det hemliga talet i variabeln hemligt. Den allmänna strukturen: switch (väljaren) case konstant1 :... sätter stopp för användningen av switch i GuessDoRand därför att väljaren kan vara en variabel av typ int eller char i vårt fall är gissat en int-variabel (det är ok) medan konstant1 måste vara ett konstant uttryck, annars kan man inte kompilera. I vårt fall är hemligt som skulle skrivas efter case, inget konstant uttryck utan en intvariabel, vilket inte är ok. Vi stöter här på switch-satsens begränsningar. Därför används i GuessDoRand en enkel if- samt en if-else-sats för att avgöra trevägsvalet gissat lika med, mindre eller större än hemligt. En körning ger: 162

12 Har man efter ett tag ingen lust att gissa vidare och vill avsluta, kan man mata in 0. Man får då reda på programmets hemliga slumptal vid just den aktuella körningen: do-satsen är en lämplig variant av repetition för dialoger mellan dator och användare. Frågan om vilken variant av repetition man ska välja, kan inte besvaras generellt, eftersom det är det konkreta problemet som avgör valet. Innan vi avslutar do-satsen vill vi nämna en företeelse som man kan råka ut för när man jobbar med loopar: Evighetsslinga I det inledande exemplet DoRand är den första do-satsens avslutningsvillkor ++i < 5. Detta innebär att före villkorets test, i:s värde ökas med 1 och att villkoret i < 5 testas med i:s ökade värde. Tas ++ bort dvs ersätts avslutningsvillkor med i < 5, avslutas loopen och därmed programmet aldrig: Man har råkat ut för en s.k. evighetsslinga. Orsaken är att villkoret är sant från början i har ju initierats till 1 och förblir sant hela tiden, så loopen fortsätter i all evighet. Generellt innehåller en loop alltid möjligheten till en evighetsslinga. För att undvika den, måste villkoret och satserna i kroppen formuleras på ett sådant sätt att villkorets sanningsvärde ändras, så att villkoret blir falskt efter några varv. Detta krav har realiserats i programmet DoRand genom att använda ++i. Dvs, har man med en lämplig initiering av i kommit in i do-satsen, kommer i att öka med 1 i varje varv så att det någon gång blir = 5. Då stoppas loopen. Glömmer man ökningen ++ och initierar i med ett värde mindre än 5, blir do-satsen en evighetsslinga. Omvänt: Är do-villkoret falskt från början, görs ingenting. Initieras i till ett värde >= 5, blir villkoret falskt från början och man kommer aldrig in i kroppen ( aldrigslinga ). Programflödet fortsätter vid första satsen efter do-slingan. Testa gärna dessa möjligheter. Gå också igenom i detalj dvs varv för varv, varför do-satserna i programmet DoRand producerar exakt 4 utskrifter av slumptal (sid 160). Vi kommer i övernästa avsnitt, i programmet ForRand att översätta dessa do-satser till for-satser (sid 168). Där diskuteras också antal varv och båda programmen som producerar samma resultat, jämförs med varandra. 163

13 8.4 "Gissa tal" som klass Nu kan vi sammanföra våra kunskaper om klasser, objekt och referenser för att skriva en klassvariant till Spelserien Gissa tal som introducerades på sid 152 och vidareutvecklades sedan i ett antal steg. Samtidigt tillämpar vi idéerna om modularisering och återanvändning av kod: Klassen RandNr samt dess metod slumpa() används utan att ändra koden för att initiera programmets hemliga tal med ett slumpvärde mellan 1 och 20. Följande klass anropar slumpa() för att förse varje objekt av den med ett nytt slumptal: // GuessNr.java // Klass som implementerar "Gissa tal"-spelet med två datamedlem- // mar för det gissade och hemliga talet och en metod med spelets // regler som hjälper användaren att gissa rätt import javax.swing.joptionpane; class GuessNr int gissat; int hemligt = RandNr.slumpa(1, 20); // Anrop av statisk // metod i ickevoid spela() // statisk miljö do gissat = Integer.parseInt(JOptionPane.showInputDialog( "Gissa ett tal mellan 1 och 20 (Avsluta med 0)")); if (gissat == 0) JOptionPane.showMessageDialog(null, "Programmets " + "hemliga tal var " + hemligt, "Avbrott", 1); break; if (gissat < hemligt) JOptionPane.showMessageDialog(null, "För LITET, försök igen!"); if (gissat > hemligt) JOptionPane.showMessageDialog(null, "För STORT, försök igen!"); while (gissat!= hemligt); if (gissat == hemligt) System.out.print('\u0007'); // datorljud JOptionPane.showMessageDialog(null, "Grattis, du " + "har gissat rätt!", "\"Gissa tal\" gratulerar:", 1); 214

14 I klassen GuessNr anropas metoden slumpa() för att initiera datamedlemmen hemligt med ett slumptal i intervallet [1, 20]. Anropet framhävt med vit bakgrund görs med klassnamnet pga metoden är statisk. Dessutom är det inbakad i en tilldelningssats därför att slumpa() är en metod med returvärde. Att initiera en datamedlem direkt i klassen är inte så vanligt. I det här fallet är det motiverat eftersom variationen i slumpen ger olika värden för de olika objekt som kommer att skapas av klassen GuessNr. Dessutom ska varje spelomgång och därmed varje objekt ha endast ett hemligt tal som användaren ska gissa fram sig till. Att initieringen görs i klassen betyder inte att datamedlemmen hemligt är en klassvariabel. Då borde den vara deklarerad som static vilket den inte är. Utan den är en instansvariabel precis som den andra datamedlemmen gissat som initieras först i metoden spela(). Att det överhuvudtaget är möjligt att anropa den statiska metoden slumpa() i klassen GuessNr:s icke-statiska miljö det hade lika bra varit möjligt att anropa den i GuessNr:s icke-statiska metod spela() beror på regeln enligt vilken statiska metoder kan anropas i icke-statiska miljöer, men inte omvänt: Ickestatiska metoder kan inte anropas i statiska miljöer (sid 247). Klassen ovan kan kompileras för sig, men inte exekveras eftersom main() saknas. Programmet i sin helhet består av tre klasser (moduler) i tre filer som lagras i en mapp: Klassen ovan, klassen RandNr och följande klass som testar klassen ovan i den bemärkelse att placera metoden main() i den, skapa där ett GuessNr-objekt och anropa dess metod spela(). Man kan också säga att test klassen (nedan) är en slags drivrutin eller drivklass för klassen GuessNr. Den sätter igång ( driver ) hela programmet. Utan den fungerar ingenting. Men huvudjobbet görs ändå av klassen GuessNr eftersom den innehåller spelets egentliga kod i form av metoden spela(). // GissaTalTest.java // Testar klassen GuessNr genom att skapa ett objekt av den och // anropa objektets metod spela() // Kan både kompileras och exekveras: Utgör med klasserna Gissa- // Tal och RandNr ett program som gör samma sak som "Gissa // tal"-spelets tidigare versioner class GissaTalTest public static void main(string[] a) GuessNr g = new GuessNr(); // Objekt skapas g.spela(); // Metod anropas Allt går ut på att anropa void-metoden spela() som implementerar spelets regler och genomför det i ordande former dvs låter användaren med lite hjälp gissa flera gånger tills den gissat rätt eller på begäran avslöjar spelets hemliga tal. Den innehåller i huvudsak en loop som håller igång, styr, kontrollerar och avslutar en spelomgång. Vi har tagit över koden från Gissa tal -spelets senaste version GuessNEG och skrivit den i klassen 215

15 GuessNr på förra sidan efter att ha eliminerat allt som har att göra med den logiska operatorn NEGATION för att ha fokus på programmets objektorienterade aspekter. Men metoder i Java och därmed även metoden spela() kan endast anropas utifrån ett objekt eller en klass. När det sker från en klass måste de vara statiska vilket spela() inte är (se klassen GuessNr). Därför behöver det ett objekt för att anropas. Ett sådant skapas i klassen GissaTalTest med new GuessNr() och tilldelas referensvariabeln g. Sedan anropas metoden med denna objektreferens: g.spela(), dvs metoden anropas i det objekt som g refererar till. Man skulle kunna anropa spela() även med ett anonymt objekt i en enda sats: new GuessNr().spela(); och därmed spara undan referensvariabeln vilket inte just förbättrar kodens läslighet. Förutom klasserna ovan är programmets tredje modul klassen RandNr som innehåller metoden slumpa() och som vi har skrivit och använt tidigare i programmet ExternMeth (sid 244). Nu drar vi nytta av att vi har lagrat den externt i en separat fil och kan använda den direkt utan att behöva ändra en enda rad kod. Därför återges koden inte en gång till här utan hänvisas till sid 244. Det enda som behöver göras är att kopiera över filen till samma mapp där även filerna GuessNr.java och GissaTalTest.java är lagrade för att klasserna ska hitta varandra. Egentligen räcker det om class-filen ligger i samma mapp. Även detta steg är i professionella sammanhang onödigt om man syr ihop sina klasser till ett paket. För körresultat av programmet ovan hänvisas till de dialoger vi fick av spelets tidigare versioner eftersom de är bortsett från slumpens variation identiska (sid 162/163). 216

Innehållsförteckning

Innehållsförteckning Innehållsförteckning Ämne Sida Program Hur ska man lära sig programmering med Java? 11 Kapitel 1 Introduktion till programmering 13 1.1 Vad är programmering? 14 1.2 Vad är en algoritm? 16 1.3 Olika sätt

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

JAVAUTVECKLING LEKTION 4

JAVAUTVECKLING LEKTION 4 JAVAUTVECKLING LEKTION 4 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Iterationer (loopar) Algoritmer Mer om felsökning 1 WHILE-SATSEN String s = JOptionPane.showInputDialog("Talet

Läs mer

1 Iteration. 1.1 for-satsen

1 Iteration. 1.1 for-satsen 1 Iteration Iteration innebär en upprepning, repetition av satser. Vi har nu sett hur en villkorssats kan välja att utföra ett satsblock beroende på om ett villkor är uppfyllt, selektion. För selektion

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

C++ Slumptalsfunktioner + switch-satsen

C++ Slumptalsfunktioner + switch-satsen C++ Slumptalsfunktioner + switch-satsen Veckans avsnitt består av ett antal lite udda funktioner man kan ha nytta av när man skriver program. Det är en slumptalsgenerator och lite annat smått och gott.

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Programmering i C, 7,5 hp

Programmering i C, 7,5 hp Programmering i C, 7,5 hp Föreläsning 4 VÄLKOMNA! 31 switch-satsen Antag att vi har en heltalsvariabel a som skall styra programflödet Antag vidare att a kan anta tex 5 olika värden 1,2,3,4,5 printf( Mata

Läs mer

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val) Villkor och tester Ett program består i princip av: Deklarationer som inför variabler, dvs namngivna minnesceller som används för att lagra data. int a; double radie=1.0, yta; double d = 4.5; String s

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Tentamen , Grundläggande programmering i Java

Tentamen , Grundläggande programmering i Java Institutionen för informationsteknologi och medier Sid:1(3) Grundläggande programmering i Java Martin Kjellqvist Lösningsförslag, lösningsansatser Tentamen 2006-01-20, Grundläggande programmering i Java

Läs mer

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

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 Outline Objektorienterad Programmering (TDDC77) Föreläsning IV: while, for, do while, switch, arrayer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Ordning Villkorliga hopp I Normalt sett så

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor 732G11 Linköpings universitet 2011-02-01 1 2 3 Strukturdiagram Strukturdiagram används för att visa hur ett program fungerar. Man kan se alla val och upprepningar som sker i programmet. Består av tre (!)

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

System.out.println(Jaså du har + antalhusdjur+  husdjur); if ( antalhusdjur > 5 ) System.out.println(Oj det var många); 1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende

Läs mer

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

"if"-satsen. Inledande programmering med C# (1DV402)

if-satsen. Inledande programmering med C# (1DV402) "if"-satsen Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i verket if-satsen

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val 732G11 Linköpings universitet 2011-01-26 1 2 3 4 Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron ==

Läs mer

Variabler och konstanter

Variabler och konstanter Variabler och konstanter Deklareras automatisk när man stoppar in data i dem. X = 7 Y = A Z = Kalle Definieras av att de har: ett namn (X) en datatyp (Integer) ett värde (t.ex. 7) Lagras i datorns minne!

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

4.4 Swing ett interaktivt grafiskt gränssnitt

4.4 Swing ett interaktivt grafiskt gränssnitt 4.4 Swing ett interaktivt grafiskt gränssnitt Våra javaprogram har hittills bara haft utdata, inga indata. Det var utdata som skrevs ut från programmet till bildskärmen antingen med metoden showmessagedialog()

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

Föreläsning 3. Iteration while-satsen

Föreläsning 3. Iteration while-satsen Föreläsning 3 Iteration while-satsen Datatypen double I en dator kan man inte lagra hur stora eller hur små tal som helst. De enkla datatyperna, som används för att lagra tal (t.ex. int och double), har

Läs mer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer Föreläsning 4 Metodanrop switch-slingor Rekursiva metoder Repetition av de första föreläsningarna Inför seminariet Nästa föreläsning Metodanrop - primitiva typer Vid metodanrop kopieras värdet av en variabel

Läs mer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Från laboration 3 till 4 I laboration 3 har du implementerat klasser implementerat metoder i klasserna I laboration 4 kommer du att implementera

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F2:1 OOP Objekt-orienterad programmering Föreläsning 2 Input/Output Programsatser Selektion Output OOP F2:2 Görs via System.out, anropa antingen print eller println: System.out.print("Hej"); System.out.println(

Läs mer

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada Mer källkod Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne Erik Forslin efo@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 1 Styrstrukturer i Java En styrstruktur är något som påverkar

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram? Programmeringsteknik och Matlab Övning 2 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

JAVA Mer om klasser och objektorientering

JAVA Mer om klasser och objektorientering JAVA Mer om klasser och objektorientering Begreppet package - paket Package används när man t ex vill skapa ett eget bibliotek med klasser. Sen är det då meningen att man ska importera detta paket i det

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser // En första version av BankKonto-klassen class BankKonto { private String namn; private long nr; private double saldo; private double ränta; // Klassen TestaBankKonto // Klassens uppgift är att skapa

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private. Tentamen Programmeringsteknik I 2013-06-14 med lösningar 1. Svara kortfattat på följande: a) Vad är en instansvariabel? Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/

Läs mer

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random Kasta tärning tills etta Skriv ett program som låter en användare spela detta tärningsspel: Spelaren gör första tärningsslaget och får samma poäng som tärningen visar. Sedan fortsätter spelet enligt följande

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

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

Föreläsning 3: Booleans, if, switch TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Frekvenstabell över tärningskast med C#

Frekvenstabell över tärningskast med C# Instruktion Frekvenstabell över tärningskast med C# Introduktionsuppgift Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Innehåll Du ska följa steg för steg -instruktionen i

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel 732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F2:1 OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion Deklaration och tilldelning OOP F2:2 int x; double d; char ch; boolean

Läs mer

Logik och kontrollstrukturer

Logik och kontrollstrukturer Logik och kontrollstrukturer Flödet av instruktioner i ett programmeringsspråk bygger vi upp med hjälp av dess kontrollstrukturer. I C har vi exemplen if, if else, while, do while. Dessutom finns switch

Läs mer

Programmering för språkteknologer I, VT2012. Rum

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Iteration while-satsen

Iteration while-satsen Datatypen double TDA143 I1 Programmerade system Föreläsning 3 (OH-bilder 3) Iteration while-satsen Christer Carlsson I en dator kan man inte lagra hur stora eller hur små tal som helst. De enkla datatyperna,

Läs mer

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN HI1024 Programmering, grundkurs TEN2 2014-10-27 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Programmering för språkteknologer II, HT2011. Rum

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Data, typ, selektion, iteration

Data, typ, selektion, iteration Data, typ, selektion, iteration En programmeringkurs på halvfart IDT, MDH ttp://www.negative-g.com/nolimits/no%20limits%20defunct%20coasters.htm 1 Dagens agenda Talrepresentation Typkonvertering Sekvens

Läs mer

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen Föreläsning 3 Iteration while-satsen for-satsen do-satsen Datatypen double De enkla datatyperna, som används för att lagra tal (t.ex. int och double), har en begränsad storlek och representerar således

Läs mer

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet

Läs mer

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga 203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6

Läs mer

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Inledande programmering med C# (1DV402) Tärningarna ska kastas Tärningarna ska kastas Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll

Läs mer

Agenda. Objektorienterad programmering Föreläsning 13

Agenda. Objektorienterad programmering Föreläsning 13 Objektorienterad programmering Föreläsning 13 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Ett objektorienterat exempel Repetition Mer om arv Abstrakta klasser Abstrakta metoder

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det

Läs mer

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4: (22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard

Läs mer

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A Skriftlig tentamen för kursen DV017A Inledande programmering i Java A Skrivtid 4 timmar 09.00 13.00 Instruktioner Detta är en tentamen som består av fleralternativsfrågor. Här är några viktiga punkter:

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander F4 Klasser och Metoder ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Klasser och objekt Klasser definierar (utgör idén) Objekt instantierar (utgör förekomsten) En klassdefinition Många

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Lektion 4, del 1, kapitel 10 Funktioner i JavaScript Inlärningsmål Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Introduktion

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

Läs mer

Malmö högskola 2012/2013 Teknik och samhälle

Malmö högskola 2012/2013 Teknik och samhälle Laboration 5 Avsikten med laborationen är att du ska träna på att använda iterationer i dina program. I vanlig ordning placerar du dina lösningar i paketet laboration5. Uppgifterna är lätt matematiska

Läs mer

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

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

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer F6 Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Speciellt den här gången så finns många OH med program som inte fungerar eftersom det är just det vi skall se på

Läs mer

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna. 1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

Malmö högskola 2008/2009 CTS

Malmö högskola 2008/2009 CTS Laboration 5 Avsikten med laborationen är att du ska träna på att använda iterationer i dina program. I vanlig ordning placerar du dina lösningar i paketet laboration5. Uppgifterna är lätt matematiska

Läs mer

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 11 I måndags: programmera effektivt planera skriv tydlig kod använd felsökning teori inkapsling referenser static new, konstruktorer

Läs mer

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera Föreläsning 2 Variabler, tilldelning och kodblock if-satsen Logiska operatorer Andra operatorer Att programmera Variabler Det är i variabler som all data (information) lagras. Genom att ändra värde på

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

Programmeringsteknik I

Programmeringsteknik I Programmeringsteknik I Föreläsning 2: Grundläggande Java Johan Öfverstedt Java Grundläggande begrepp Datatyper Selektion if Räckvidd (scope) Iteration while Klasser Objekt Metoder Metodhuvudet Kodstandarden

Läs mer

JAVAUTVECKLING LEKTION 3

JAVAUTVECKLING LEKTION 3 JAVAUTVECKLING LEKTION 3 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Numeriska typer Inläsning av numerisk data Numeriska typomvandlingar Standardklassen Math Villkorskonstruktioner

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer