OOP
På denna sida finns hela kursen.
Startsida
Välkommen till kursen OOP. Kursen läses under flera olika kursbeteckningar. Det viktiga med detta är att du tittar på rätt schema när det gäller undervisningstillfällena samt att du lämnar in dina inlämningsuppgifter på korrekt ställe. Ditt schema ser du t.ex. via Daisy. På de olika inlämningsuppgifterna finns inlämningsinstruktioner, följ dessa exakt. Kursen läses hösten 2011 av:-
DSK1:OOP
- FC-konferens: OOPDSK
- DSK1:OOP läses av DSK-kandidaten, DVK-kandidaten och KTHs ASP-kandidat
-
GES:OOP
- FC-konferens: OOPGES
- GES:OOP läses av EIT-kandidaten, Spelkandidaten samt fristående kurser
Samma innehåll, samma inlämningsuppgifter mm.
Allt material och all information finns på denna webb-plats.
Har du frågor om kursen så kontakta Marie Olsson.
Programmeringsmiljö
På kursen används Java version 6, JDK 6.Detta finns redan installerat på DSVs stationära datorer. Om du vill kunna använda din egen dator så måste du installera Java. Instruktioner om hur man gör detta finns på DSV:s webbsidor, se »Java på DSV:s webb«. OBS att du bör vara mycket noggrann när du laddar hem och installerar Java, det är viktigt att följa alla installeringsinstruktioner exakt. Själva koden skriver du i en texteditor. Vilken som helst kan användas, här finns lite tips om olika: »Texteditorer«. Prata gärna med dina medstudenter och hör vilken de använder och tipsa varandra om vilken ni gillar.
Litteratur
Kurslitteratur är John Lewis & William Loftus: Java Software Solutions (Upplaga: 7), Addison Wesley, ISBN 0-273-75147-6. Dock kommer inga direkta hänvisningar till kursboken att göras, varför även annan bok om Java kan användas. Boken bör dock behandla Java 5 eller senare (böcker som behandlar Java 4 (eller 1.4) är alltså för gamla). Kursboken Lewis/Loftus upplaga 5 går bra att använda. Den som önskar bok på svenska kan använda Jan Skansholm: Java Direkt med Swing (sjätte upplagan), ISBN 91-44-06074-3. Kursboken är dock den som rekommenderas. Det är en bok som vänder sig till nybörjare. Boken har separerat ut allt om grafiska användargränssnitt och lagt det i slutet av varje kapitel, tydligt märkt i marginalen. Dessa sidor kan med fördel hoppas över när man läser boken. Grafiska användargränssnitt kommer att behandlas på föreläsning 16, dock kan detta ses som överkurs på denna kurs och kommer inte att ingå i examinationen. Hela kursboken ingår på kursen, förutom kapitlen 9.4, 9.5, 11 och 12. Dessutom ingår heller inte delarna om grafiska användargränssnitt (sista delarna av varje kapitel, tydligt utmärkta i marginalerna). De delar som ej ingår är givetvis intressanta och kan med fördel läsas, men kommer ej att examineras på kursen OOP.Examination
Hela kursen är på 7.5 hp. Examinationen uppdelad i tre delar:- Inlämningsuppgift 1, 1.5 hp
- Inlämningsuppgift 2, 3 hp
- Tentamen, 3 hp
Betyg på tentamen är A-F. För information om inlämningsuppgifterna, se fliken "Inlämningsuppgifter" på denna webbplats.
För betygskriterier på tentamen, se kursinformationen i Daisy.
På tentamen är det tillåtet att ha med bok (eller böcker) om Java som hjälpmedel. Här kommer de tre senaste årens tentor, med lösningsförslag. Årets tenta kommer att gå i ungefär samma stil. Ordinarie tenta HT2007: Tenta20071221
Lösningsförslag: Tenta071221Lösning Ordinarie tenta HT2009: Tenta20090116
Lösningsförslag: Tenta090116Lösning Ordinarie tenta HT2010: Tenta20100115
Lösningsförslag: Tenta20100115Lösning Ordinarie tenta HT2011: Tenta20110114
Lösningsförslag: Tenta20110114Lösning Ordinarie tenta HT2012: Tenta20120114
Lösningsförslag: Tenta20120114Lösning
Handledning
Handledning kommer att finnas följande dagar och tider: Dag Tid Vecka 4721/11 10-15
22/11 10-15
23/11 10-15
24/11 10-15
25/11 10-15 Vecka 48
28/11 10-15
29/11 10-15
30/11 10-15
1/12 10-15
2/12 10-15 Vecka 49
5/12 10-15
6/12 10-15
7/12 10-15
8/12 10-15
9/12 10-15 Vecka 51
19/12 10-15
20/12 10-15
21/12 10-15
22/12 10-15 Vecka 52
28/12 11-14
29/12 11-14 Vecka 1
3/1 11-14
4/1 11-14
5/1 11-14 Vecka 2
9/1 10-15
10/1 10-15
11/1 10-15
12/1 10-15
13/1 10-15 Vecka 9
27/2 10-15
28/2 10-15
29/2 10-15
1/3 10-15
2/3 10-15 OBS att listan inte öppnas för anmälan förrän exakt på starttiden. Dessa tider kan man få hjälp av en handledare. Logga in på »handledning.dsv.su.se«. Första gången du går hit så måste du skapa ett nytt konto. Gör det med din DSV-mailadress som id (exempelvis anna-and@dsv.su.se), du bör ha ett annat password här än på ditt vanliga konto. Därefter kan du anmäla dig för handledning, var noga med att välja handledningslistan med namn OOP. Ett antal handledare går runt och kommer till dig när det är din tur. Du kan se status på sidan, t.ex. hur många som är före dig i kön. Om du byter plats så glöm ej att göra det på handledningslistan, annars hittar inte handledarna dig. Om du skall ta en paus för t.ex. lunch så kan du pausa dig på listan så att inte handledare kommer när du är borta. Ni kan även få elektronisk handledning genom att ställa frågor i kursens FC-konferens, i underkonferensen Fritt Forum. Där kan ni ställa frågor närsomhelst dygnet runt, vi kommer att besvara frågorna så fort vi hinner.
Föreläsningar
Föreläsningsbilder läggs in på denna sida både som pdf och powerpoint allteftersom de blir klara.Vecka 1
Denna vecka diskuteras vad programmering är samt Javas grundläggande imperativa delar:-
Variabler
- Deklaration
- Tilldelning
- Output
- Input
-
Selektion
- if-satsen
- switch-satsen
-
Iteration
- while-loopen
- do while-loopen
- for-loopen
- Arrayer
-
Metoder
- Klass-metoder
- Instans-metoder
Föreläsningsbilder F2
Föreläsningsbilder F3
Föreläsningsbilder F4
Vecka 2
Vecka 2 handlar om klasser och objekt.- Klass
-
Objekt
- Referenser
- Skapa objekt - new
- Konstruktorer
-
Inkapsling
- private
- public
- Hantering av många objekt
- ArrayList<E>
- toString-metoden
- this
Föreläsningsbilder F7
Föreläsningsbilder F8
Vecka 3
Vecka 3 handlar om arv och arvshierarkier.-
Arv
- extends
- konstruktorer
- super
- åtkomst via cast
- instanceof
-
Polymorfism
- abstract
- överskuggning
- interface
Föreläsningsbilder F11
Vecka 4
I vecka 4 går vi igenom JOptionPane, undantag och filhantering.- Hur skapar man en dialogruta
-
Undantagshantering
- (Exceptions)
- try - catch
- Filhantering
Föreläsningsbilder F14
Vecka 5
Vecka 5 kommer att innehålla lite om grafiska användargränssnitt, tentaövning och frågestund.- GUI
Inlämningsuppgifter
Uppgifterna består av programmeringsuppgifter som skall lösas genom att implementeras och testköras i Java. Uppgifterna skall lösas i grupper om 1-3 studenter (det är alltså INTE tillåtet att jobba fyra eller fler i en grupp). Studenten skall kunna redogöra för sin lösning och motivera de olika val som gjorts vid lösningen. Om man jobbat i grupp om 2 eller 3 studenter skall ALLA i gruppen kunna redogöra för VARJE del av lösningarna. Det är alltså inte tillåtet att "dela upp" uppgifterna och göra varsin del. Samtliga gruppmedlemmar skall kunna redogöra för samtliga delar av lösningarna.
Inlämningsinstruktioner
OBS - följ instruktionerna EXAKT annars kommer er uppgift inte att rättas.
Inlämning skall ske via kursens First Class-konferens, i underkonferensen Inluppar. OBS att det är flera olika studentgrupper som läser kursen så var noga med att du lämnar in uppgiften i korrekt FC-konferens. Vilken FC-konferens som gäller för vilka studenter framgår av Startsidan.
Inlämning görs genom att skicka ett brev till konferensen med rubriken "Inlupp 1" respektive "Inlupp 2". I brevtexten skall stå namn+personnummer för samtliga gruppmedlemmar. Vidare skall källkoderna (filerna med extension .java) skickas med som attachment. OBS alltså att det är .java-filerna skall skickas in. Dessa filer får inte vara komprimerade på något sätt (alltså INTE zippade eller jarade eller på annat sätt komprimerade). Givetvis skall samtliga filer som ingår i lösningen skickas in.
För att bli rättade i första rättningsomgången så skall:
- Inlämningsuppgift 1 lämnas in senast 2011-12-11
- Inlämningsuppgift 2 lämnas in senast 2012-01-16
En andra rättningsomgång kommer att finnas i anslutning till omtentan, man skall då lämna in senast 2012-03-05.
Inlämningsuppgift 1
Denna uppgift är lämplig att börja med efter föreläsning 6.
OBS att det är INTE meningen att denna uppgift skall lösas med hjälp av arv.
Skriv ett program som hanterar ett litet register över hundar som finns på en kennel. För varje hund som registreras skall finnas namn, ras, ålder och vikt.
Programmet skall vara kommandostyrt och fyra olika kommandon skall kunna ges:
- Registrera. Användaren får frågor om namn, ras, ålder och vikt för hunden. Ett hundobjekt skapas och läggs in i kennel-registret.
-
Lista. Användaren får en fråga om minsta svanslängd och programmet skriver ut en lista på alla hundar hos kenneln som har längre svanslängd än denna minsta angivna (om man anger 0 så kommer alltså alla hundar att skrivas ut, anger man 10 så skrivs bara de hundar vars svanslängd>=10 ut). Svanslängden för en hund kan räknas ut med den fiffiga formeln:
svanslängden=åldern*vikten/10
. Denna formel gäller för alla hundar UTOM taxar. En tax har alltid svanslängden 3.7. Vid utskriften skall alla hundens attribut samt svanslängden skrivas ut, t.ex.Fido Pudel 4 år 7 kg svans=2.8
ellerNisse Tax 6 år 8 kg svans=3.7
. -
Ta bort. Användaren får en fråga efter namnet på hunden som skall tas bort. Hunden med det angivna namnet skall tas bort ur kennel-registret. Om det inte finns någon hund med det angivna namnet så skall programmet skriva ut
Hund med det namnet fanns ej i registret
annars skall det skrivas utHunden med det angivna namnet är borttagen
. Ni behöver inte tänka på komplikationen att det kan finnas flera hundar med samma namn. - Avsluta. Programmet avslutas. En tråkig effekt är att när programmet avslutas så "försvinner" allt lagrat data (objekt som skapas ligger i primärminnet och finns bara så länge programmet körs). Alla registrerade hundar försvinner alltså. Vi kommer senare på kursen att prata om hur man kan lagra data mellan två körningar men i detta program struntar vi i detta.
En hund representeras som ett objekt av klassen Hund. Varje hund har ett antal attribut. Dessa attribut skall vara inkapslade, alltså deklarerade som private
. Åtkomst till attributen sker genom lämpliga metoder (som då är deklarerade som public
).
De olika Hund-objekten som skapas skall lagras i en datasamling. Här skall ArrayList<Hund>
användas. Hantering av Hund-objekt görs då genom att skapa ett objekt av samlingsklassen och i detta objekt anropa olika metoder, exempelvis add för att addera en ny hund till samlingen.
Att ett program är kommandostyrt fixas lämpligen genom att man i huvudprogrammet (main-metoden) har en loop där användaren får mata in ett kommando (i detta exempel en siffra mellan 1 och 4) och sedan utförs det kommandot. Detta upprepas tills användaren ger kommandot för att avsluta, då bryts loopen. Man bör här ge något lämpligt felmeddelande om ett felaktigt kommando matas in.
Vid lösningen av denna uppgift kan ni förutsätta att användaren gör rätt. Om man t.ex. frågar efter ett heltal så kan ni förutsätta att ett heltal verkligen matas in (skulle något annat matas in så leder det förmodligen till ett exekveringsavbrott). Det behövs alltså inga indatakontroller för att man skall bli godkänd.
Innan ni lämnar in skall ni (givetvis) testa att ert program fungerar som det ska. Görs lämpligen genom att ni skapar några hundar (varav minst en är en tax) och sedan provar att lista alla dessa (genom att ange minsta svanslängd vid listningen som 0, då skall alla hundarna skrivas ut).
Därefter ange lämplig annan minsta svanslängd så att ni ser att inte alla skrivs ut. Kontrollera att detta fungerar som det ska. Ta sedan bort en av hundarna, lista igen och kontrollera så att den borttagna hunden verkligen försvunnit. Det är en mycket viktig del av programmering att testa koden man skrivit för att se att den fungerar som den ska.
Inlämningsuppgift 2
Ni skall skriva ett litet registerprogram som håller reda på personer och dessa personers olika prylar (värdesaker). En person identifieras med sitt namn (namnen är unika, två personer kan alltså ej ha samma namn, se vidare Skapa person nedan) och innehåller de prylar som personen äger. Prylar är saker som har ett visst värde. Det finns tre olika slags prylar, nämligen smycken, aktier och apparater.
Ett smycke består av namn ("Ring", "Halsband" etc.), antal ädelstenar samt ifall smycket är av silver eller av guld. En aktie (egentligen aktiepost) har ett namn ("Ericsson", "Asea" etc.), ett antal samt ett pris (vad varje aktie är värd). Priset på en aktie skall kunna ändras. En apparat har ett namn ("Tv", "Dator" etc), ett inköpspris och ett slitage (ett tal mellan 1 och 10 där 10 betyder helt ny och 1 mycket sliten). För varje pryl skall man kunna beräkna dess värde. Beräkningen går till på olika sätt beroende på vilken sorts pryl det är:
- Smycken: om smycket är av guld så är värdet 2000, om det är av silver så är värdet 700. Dessutom ökar värdet med 500 för varje ädelsten
- Aktier: värdet är antalet * priset
- Apparater: värdet varierar beroende på slitaget. Om slitaget är 10 (apparaten är ny) så är värdet lika med priset, är slitaget 9 är värdet 90% av priset, är slitaget 8 är värdet 80% av priset osv.
Programmet skall vara kommandostyrt och följande kommandon skall kunna ges:
- Skapa person. En ny person skapas genom att programmet frågar efter personens namn. Om det redan finns en person i registret med det namnet ges ett felmeddelande, annars skapas personen och läggs in i registret.
- Skapa pryl. En pryl skapas via en dialog. Programmet frågar efter namn på personen som skall äga prylen, vilken sorts pryl det är samt den prylens olika attribut. Därefter skapas ett prylobjekt som adderas till den personens prylsamling. Om ingen person med det angivna namnet finns ges ett felmeddelande. Dialogen skulle t.ex. kunna se ut så här:
Vilken person äger prylen: Sara Vilken sorts pryl: Smycke Vilket sorts smycke: Halsband Är smycket av guld? Ja Antal ädelstenar: 7
- Visa alla. En lista över alla personer i registret skrivs ut. För varje person skrivs ut personens namn samt det sammanlagda värdet av personens prylar ut. Detta värdet beräknas som summan av personens olika prylars värde. Listan skulle t.ex. kunna se ut så här:
I registret finns: Sara 12875 Kalle 92400 Nisse 8200 Karin 48400
- Visa rikaste. Namn, sammanlagda värdet samt de olika prylarna skrivs ut för den person i registret som har högst värde. Skulle t.ex. kunna se ut så här:
Rikast är Kalle som sammanlagt äger 92400 Ring 3800 Plasma-tv 38600 Ericsson 43000 Stereo 7000
- Visa viss person. Programmet frågar efter namnet på en person och skriver ut den personen (inklusive personens prylar, som ovan). Om personen ej finns i registret ges ett felmeddelande.
- Börskrasch. Alla aktier i hela världen blir värdelösa. Ert program skall gå igenom alla personers alla prylar. För alla aktie-prylar sätts priset till 0. (Obs att detta ej gäller retroaktivt, utan nya aktier som adderas efter börskraschen kan ha pris).
- Avsluta. Programmet avslutas.
Obs att dialog-exemplen ovan endast är exempel på hur det skulle kunna se ut. Er dialog behöver ej se ut exakt på det sättet. Ni får t.ex. gärna använda dialogrutor med JOptionPane om ni vill.
Ni kan själva välja hur användaren skall kunna ange vilket kommando som skall utföras. T.ex. kan man tänka sig en kommandostyrning liknande den från inlämningsuppgift 1 med kommandona:
- Skapa person
- Skapa pryl
- Visa alla
- Visa rikaste
- Visa viss person
- Börskrasch
- Avsluta
Samtliga attribut i de olika klasserna skall vara inkapslade, dvs deklarerade som private och endast åtkomliga via public-metoder.
Programmet skall dessutom ha indatakontroller så att programmet inte kraschar om användaren skulle mata in felaktiga värden. Om man t.ex. frågar efter antal aktier (ett heltal) och användaren svarar "Groda" så skall ett felmeddelande skrivas ut. Hur indatakontroller görs behandlas på föreläsning 12.
Vidare skall programmet vara byggt så att klass Person skall vara generell ur den aspekten att om ni lägger till en ny sorts pryl (t.ex. Kontanter eller Bilar) så skall ni inte behöva förändra klass Person alls.
Frivillig extra utökning 1 - filhantering
Ett sådant här registerprogram är ganska värdelöst om inte datat som finns i primärminnet (de olika personerna och dessa personers alla prylar) lagras på sekundärminnet mellan olika exekveringar. Lägg därför till filhantering som gör att datat sparas mellan två programkörningar. Lämpligt är att registret automatiskt sparas när programmet avslutas och att det laddas in igen när programmet startas nästa gång (filhantering har diskuterats på föreläsning 12).
Denna filhantering rekommenderas (bra övning!), men eftersom vi gått genom filhantering så pass lite på kursen är det inte obligatoriskt.
Frivillig extra utökning 2 - borttag
Lägg till funktionaliteten borttag. Både på person-nivå och på pryl-nivå. På person-nivå så får användaren möjlighet att mata in namnet på den oönskade personen. Programmet ser till att personen med angivet namn tas bort ur registret. Finns ingen person med sådant namn så ges ett felmeddelande.
Borttag av en av en persons prylar är lite svårare. Här måste man först fråga efter vilken person, därefter vilken av prylarna som skall tas bort. Skulle t.ex. kunna göras med följande dialog:
Vilken person: Kalle Kalle har följande prylar: 1 Ring 3800 2 Plasma-tv 38600 3 Ericsson 43000 4 Stereo 7000 Vilken av prylarna skall bort: 2Dessutom lägger man till två nya kommandon, Ta bort person och Ta bort pryl, i kommandostyrningen. Denna utökning bör göras först efter att den obligatoriska delen fungerar som den ska.
Lösningsstrategi inlupp 2
Inlämningsuppgift 2 resulterar i ett lite större program än tidigare exempel/inlämningsuppgift. Det gör att man bör lösa uppgiften i olika steg. Försöker man skriva allt på en gång finns stor risk att programmet blir oöverskådligt och svårhanterat. Nedan beskrivs några steg som jag rekommenderar att ni följer.
Steg 1
Skapa klasser för de olika prylarna. Eftersom det finns gemensamma delar hos de olika prylarna kan det vara lämpligt att lägga detta i en klasshierarki, där det som är gemensamt för alla prylar läggs i en superklass, och det som är specifikt för de olika sorternas prylar läggs i ett antal subklasser. Då blir det också enkelt att lägga till nya sorters prylar.
Testa att dessa klasser fungerar genom att skriva ett litet testprogram (en klass med en main-metod) där ni skapar ett antal prylar och lägger in dem i en ArrayLista. Se till att ni kan skriva ut alla prylarna på skärmen. Lägg även till en liten kodsnutt som summerar värdet av de skapade prylarna och skriver ut det.
Att efterhand skriva små testprogram är ett bra sett att försäkra sig om att ens programkod så långt är korrekt.
Detta steg kan påbörjas efter föreläsning 10.
Steg 2
Skriv klass Person. En person skall alltså kunna äga ett antal prylar, bör då dels innehålla en prylsamling (förslagsvis en ArrayList) och dels en metod för att addera en ny pryl till personen. En person skall också innehålla en metod som beräknar och returnerar sammanlagda värdet på personens prylar.
Vidare så måste det finnas möjlighet att utifrån en person som äger ett antal prylar kunna utföra en börskrasch, dvs se till att personens alla aktier får priset 0.
OBS att klass person skall skrivas så att den skall kunna användas oförändrad även om man lägger till en ny sorts pryl (se sista stycket under inlämningstexten, före de frivilliga utökningarna).
Testa att klass person fungerar genom att i ett testprogram skapa en person, skapa ett antal prylar samt skriv ut personen. Se till att personen kan skrivas ut på de två olika sätten, alltså dels namn+förmögenhet (se kommandot Visa alla):
Kalle 26400
och dels personens olika prylar (se kommandot Visa rikaste):
Ring 2700 Ericsson 16200 Plasma-TV 7500
Kontrollera även att börskraschen fungerar genom att först skriva ut personens namn, förmögenhet och prylar. Sedan anropa börskrasch-metoden och slutligen skriva ut personen igen (nu med alla aktier värdelösa).
Detta steg görs när steg 1 är klart.
Steg 3
Skriv det kommandostyrda huvudprogrammet med dialogen enligt uppgiftstexten. Se till att ha indatakontroller vid alla inmatningar. Gör ett kommando i taget, kontrollera att det funkar som det ska innan ni gör nästa kommando.
Detta steg bör inte påbörjas förrän efter föreläsning 14. På föreläsning 14 kommer vi att diskutera hur ett sådant kommandostyrt program kan se ut, hur man delar upp det i metoder etc.
Övningar
Programmering lär man sig genom att öva. Skriva små program, kompilera och testköra. Se vad som händer, prova att skriva på olika sätt osv.
Ett sätt är att skriva små program som tester de konstruktioner som diskuterats på föreläsningarna. Prova alltså gärna efter varje föreläsning att skriva program som innehåller det som föreläsningen diskuterat.
Vidare så brukar de flesta böcker innehålla många övningsuppgifter, gör dessa.
Här följer ytterligare några uppgifter som kan vara bra att göra i början av kursen. Dessa uppgifter skall INTE lämnas in.
Övningsuppgift 1 (lämplig efter F1)
Skriv ett litet Java-program som frågar användaren efter namn och som sedan skriver ut texten Hej <namnet>
. Om användaren på frågan om namn t.ex. svarar "Kalle Nilsson" så skall programmet skriva ut Hej Kalle Nilsson
.
Gör uppgiften både med dialog i terminalfönstret och via dialogrutor (JOptionPane).
Övningsuppgift 2 (lämplig efter F2)
Skriv ett program som räknar ut vilken sträcka man färdats med hjälp av hastigheten man haft och hur lång tid man färdats. Programmet frågar alltså användaren efter hastigheten och hur lång tid man färdats och skriver ut hur lång sträcka man färdats.
Börja med att ange hastigheten i meter/sekund och tiden i sekunder.
Dialogen skulle kunna se ut så här:
Hastighet (i meter/sekund): 23 Tid (i sekunder): 12 Du har färdats 276 meter!
Ändra så att tiden man färdats anges i minuter + sekunder.
Hastighet (i meter/sekund): 17 Tid (i minuter): 3 Tid (i sekunder): 18 Du har färdats 3366 meter!
Ändra programmet så att hastigheten anges i kilometer/timme istället!
Hastighet (i km/timme): 45 Tid (i minuter): 12 Tid (i sekunder): 30 Du har färdats 9375 meter!(alternativt svar: Du har färdats 9.375 kilometer!)
Övningsuppgift 3 (lämplig efter F2)
Denna uppgift handlar om tre olika sorters figurer (en kvadrat, en cirkel och en triangel) och deras areor. Programmet skall fråga en användare om värden så att man kan räkna ut de olika figurernas area och sedan skall programmet skriva ut vilken figur som hade störst area och hur stor denna arean var.
Arean för en kvadrat räknas ut som sidan*sidan.
Arean för en cirkel är pi*radien*radien.
Arean för en triangel är basen*höjden/2.
Programdialogen när ert program körs kan se ut ungefär så här:
Ange kvadratens sida: 12 Ange cirkelns radie: 7 Ange triangelns bas: 20 Ange triangelns höjd: 16 Triangeln är störst med en area på 160
Övningsuppgift 4 (lämplig efter F3)
Skriv ett program som övar på enkla aritmetiska beräkningar, t ex för ett barn att öva matematik med. Skriv programmet i små steg enligt:
1. Skriv ett program som läser in två heltal. Programmet skall sedan summera talen samt skriva ut en fråga om vad summan blev. Användaren svarar och programmet kollar om svaret är korrekt.
Exempel på användardialog:
Ange två tal: 37 16 Vad blir 37 + 16 ? 53 Rätt svar!
eller
Ange två tal: 37 16 Vad blir 37 + 16 ? 58 Fel svar - det rätta svaret är 53
2. Fixa så att man efter att man matat in två tal och besvarat frågan får en ny fråga, denna gång ifall man vill fortsätta. Svarar man JA på frågan får man mata in två nya tal och besvara frågan etc. tills man på frågan svarar NEJ.
Ange två tal: 14 9 Vad blir 14 + 9 ? 23 Rätt svar! Vill du förtsätta? JA Ange två tal: 23 19 Vad blir 23 + 19 ? 43 Fel svar - det rätta svaret är 42 Vill du fortsätta? NEJ
3. Utöka så att programmet frågar inte bara efter summan, utan även efter differensen, produkten och kvoten mellan talen. Programmet kontrollerar hela tiden resultatet. T ex:
Ange två tal: 75 5 Vad blir 75 + 5 ? 80 Rätt svar! Vad blir 75 - 5 ? 68 Fel svar - det rätta svaret är 70 Vad blir 75 * 5 ? 375 Rätt svar! Vad blir 75 / 5 ? 18 Fel svar - det rätta svaret är 15
4. Ändra så att programmet frågar efter vilken operation som skall testas. Användaren svarar med +, -, * eller /. Den önskade operationen kontrolleras. T.ex:
Ange två tal: 13 6 Vilken operation? * Vad blir 13 * 6 ? 78 Rätt svar!
5. Ändra så att programmet slumpar fram talen som skall beräknas. Prova t.ex. att slumpa fram två tal mellan 1 och 100. Ändra gärna intervallet. OBS - hur man slumpar fram värden diskuteras på F4 så vänta med del 5 och 6 tills efter F4. Utskriften kan t.ex se ut så här:
Vilken operation? + Vad blir 32 + 73 ? 104 Fel svar - det rätta svaret är 105
6. Ändra så att även tecknet (räknesättet) slumpas fram:
Vad blir 67 * 14 ? 938 Rätt svar!
Övningsuppgift 5 (lämplig efter F3)
Skriv ett program som skriver ut talen 1 - 30 på skärmen, så här:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Lös uppgiften både med en for-loop och med en while-loop.
Modifiera dina program så att talen skrivs ut med fem tal på varje rad:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Övningsuppgift 6 (lämplig efter F3)
Skriv ett litet program som frågar efter ett starttal och ett sluttal. Programmet skall sedan skriva ut alla tal i intervallet med 10 tal på varje rad.
När programmet körs kan det t.ex. se ut så här:
Ange start: 12 Ange slut: 47 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
Lös uppgiften både med en for-loop och med en while-loop.
Modifiera uppgiften så att endast vart tredje tal skrivs ut, dialog alltså enligt:
Ange start: 6 Ange slut: 55 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54
Övningsuppgift 7 (lämplig efter F3)
Skriv ett litet Java-program som ber användaren att mata in en textsträng och som sedan skriver ut hur många tecken som fanns i textsträngen samt hur många vokaler som fanns. Räkna här med svenska bokstäver, alltså vokalerna a, e, i, o, u, y, å, ä och ö. Givetvis skall det inte spela någon roll om man skriver små eller STORA bokstäver, alltså är både a och A en vokal.
När programmet körs kan det t.ex. se ut så här:
Skriv en rad: Hej hopp, detta är min textrad - RÄKSMÖRGÅS!!! Raden innehöll 46 teckan varav 11 var vokaler
Övningsuppgift 8 (lämplig efter F4)
I denna uppgift skall ni göra några operationer på en array som innehåller heltal. Arrayen skall innehålla 20 stycken heltal och följande skall göras:
- Läs in 20 stycken heltal som placeras i arrayen
- Skriv ut arrayen
- Leta upp det största talet i arrayen och skriv ut det talet samt numret på rutan som talet fanns i.
- Fråga användaren efter ett intervall (t.ex. 10 - 20). Ni skall sedan gå genom arrayen och nollställa alla värden som ligger inom intervallet (om en viss ruta t.ex. har värdet 18 och intervallet är som ovan så skall den rutan få värdet 0). Det skall fungera att ge intervallet i valfri ordning (antingen 10 - 20 eller 20 - 10).
- Skriv ut arrayen (så att det syns att rätt rutor blivit nollställda!).
- Se till så att rutorna som innehåller värdet 0 hamnar sist i arrayen (ordningen på de andra talen är ointressant, men alla 0'or skall stå sist).
- Skriv ut arrayen igen (nu med 0'orna sist).
När ni gör denna uppgift kan en bra strategi vara att göra en liten del i taget, testa att den delen fungerar, därefter göra en del till osv.
När programmet är klart skulle programdialogen kunna se ut ungefär så här:
Ange 20 tal: 18 43 57 21 77 91 25 28 43 63 8 117 3 91 22 17 212 29 55 12 Arrayen: 18 43 57 21 77 91 25 28 43 63 8 117 3 91 22 17 212 29 55 12 Största talet är 212 som finns i ruta nr 16 Intervallets första tal: 30 Intervallets andra tal: 20 Arrayen: 18 43 57 0 77 91 0 0 43 63 8 117 3 91 0 17 212 0 55 12 Nu flyttas alla 0'or sist! Arrayen: 18 43 57 77 91 43 63 8 117 3 91 17 212 55 12 0 0 0 0 0
Övningsuppgift 9 (lämplig efter F4)
Skriv ett litet Java-program (en klass med en main-metod) som frågar användaren efter ett antal textsträngar. Därefter skall programmet fråga användaren efter ett tecken och sedan skriva ut alla textsträngar som innehåller det angivna tecknet.
Programmet skall först fråga användaren efter hur många textsträngar som skall matas in. Därefter får användaren mata in alla dessa strängar. De olika textsträngarna läggs lämpligen i en array. Sedan frågas efter tecknet och slutligen skrivs alla de strängar som innehåller det angivna tecknet ut på skärmen. När programmet körs skall det se ut ungefär så här:
Hur många textsträngar? 7 Sträng 1> Hej Hopp Sträng 2> Karamellkungen Sträng 3> Papegoja Sträng 4> 762 Höga Hus Sträng 5> Gatsten Sträng 6> Antal Harar Sträng 7> Rulltrappa Ange önskat tecken: H Strängarna som innehåller H: Hej Hopp 762 Höga Hus Antal HararOm inget av orden innehåller det angivna tecknet skall ett meddelande om det skrivas ut:
Ingen av strängarna innehåller H
Som hjälp kan nämnas att klassen String bl.a. innehåller metoderna:
-
public int indexOf(int ch)
- Returnerar positionen i strängen där tecknet ch finns första gången. Om tecknet ch ej finns i strängen returneras -1.
-
public char charAt(int index)
- Returnerar tecknet som finns i position index.
-
public int length()
- Returnerar hur lång strängen är.
Klass String innehåller många fler metoder. Titta gärna på klass String i API-dokumentationen.
Övningsuppgift 10 (lämplig efter F6)
Övningsuppgift 9 löstes med en array. Gör om uppgiften så att du istället lagrar de inlästa textsträngarna i en ArrayList. Nu behöver du inte fråga efter hur många texter som skall läsas in (man kan ju enkelt stoppa in i princip hur många objekt man vill i en ArrayList). Ändra inläsningen så att man avslutar inläsningen genom att svara "STOPP" på frågan efter en ny textsträng. Programdialogen kan då se ut ungefär så här:
Sträng 1> Hej Hopp Sträng 2> Karamellkungen Sträng 3> Papegoja Sträng 4> 762 Höga Hus Sträng 5> Gatsten Sträng 6> Antal Harar Sträng 7> Rulltrappa Sträng 8> Hallonbåt Sträng 9> STOPP Ange önskat tecken: H Strängarna som innehåller H: Hej Hopp 762 Höga Hus Antal Harar Hallonbåt
Övningsuppgift 11 (lämplig efter F6)
Skriv ett Java-program som håller reda på personers namn och ålder. Programmet skall låta en användare mata in namn och ålder på ett antal personer genom att ställa frågor enligt:
Namn: Kalle Ålder: 23 Namn: Anna Ålder: 21 Namn: Kristina Ålder: 32
Denna inmatning skall hålla på tills användaren på frågan om namn svarar STOPP enligt:
Namn: STOPP
När inmatningen är klar skall programmet fråga efter en ålder och sedan skriva ut namnet på alla inmatade personer som har denna ålder. Enligt:
Ange en ålder: 23 Personerna som är 23 år gamla: Kalle Gustav Ulrika
Eftersom två olika värden ska lagras (namn och ålder) kan det vara en bra idé att skapa en speciell klass för att hantera dessa två värden.
Dialogdelen av uppgiften läggs sedan lämpligen i en main-metod.
Övningsuppgift 12 (lämplig efter F6)
På F5 och F6 diskuterades klass Myra. Skriv den färdiga klassen (koden finns på föreläsningsbilderna men behöver samanställas i en och samma fil). Ändra i toString-metoden så att även myrans eventuella partner skrivs ut. T.ex. "Myrre har 32 barr, gift med Elin"
eller "Ante har 12 barr, ogift"
.
Gör också klart det kommandostyrda huvudprogrammet som diskuterades i slutet av F6. Funktionerna skall alltså vara:
-
Skapa myra
- Fråga användaren efter namn och antal barr samt skapa sådan myra (alltså skapa ett Myra-objekt) och spara den i samlingen (ArrayListan).
-
Ändra barr
- Fråga efter namnet på en myra samt antal nya barr och uppdatera.
-
Giftemål
- Fråga efter namnen på två myror och låt dessa gifta sig (om det är ok).
-
Skriv ut alla
- Skriv ut en lista på alla myror som finns skapade.
-
Avsluta
- Programmet avslutas.
Hitta gärna på ytterligare lämpliga kommandon som skulle kunna ges och implementera dessa. T.ex. kanske man vill kunna ta bort en Myra. Vad händer om man tar bort en Myra som är gift?