Ö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?