6.5 Spelserien Gissa tal
|
|
- Karolina Mattsson
- för 7 år sedan
- Visningar:
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 Ä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
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
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
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
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
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
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.
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
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
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
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
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
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å
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 (!)
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
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
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
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 (
"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
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 ==
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!
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
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()
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å
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
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
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
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(
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
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
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
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
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...
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å
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
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 (
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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
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
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
(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
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
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
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
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
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
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
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,
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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,
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:
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
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
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[]
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)
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
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Ö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
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
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 -
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
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
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å
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
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
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
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
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å
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
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
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
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