20.11.2014 Views

OHJELMOINTITEKNIIKKA

OHJELMOINTITEKNIIKKA

OHJELMOINTITEKNIIKKA

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>OHJELMOINTITEKNIIKKA</strong><br />

1


Kurssin suoritus<br />

• Kurssin kahdesta tentistä saa kummastakin enintään 10<br />

pistettä ja harjoituksista enintään 10 pistettä eli kurssin<br />

maksimipistemäärä on 30. Arvosana määräytyy oheisen<br />

taulukon mukaan.<br />

• Harjoituksen jokaisesta kolmesta tehdystä tehtävästä saa<br />

1 pisteen (hyvä yritys riittää).<br />

• Opiskelija lähettää harjoitusohjelmansa sähköpostin<br />

liitteenä osoitteeseen mika.saari@tut.fi.<br />

• Tenttiohjelman arviointikriteerit ovat: kääntyy(2), tekee<br />

annetun tehtävän(3), ratkaisulogiikka(3), luettavuus(2).<br />

• Harjoitus- ja tenttipisteet huomioidaan kevään 2014<br />

uusintatenteissä.<br />

• Uusintatenttejä on kaksi ja ne kattavat kurssin koko<br />

aihealueen.<br />

• Yhdellä uusintatentillä voi korvata yhden tenttisuorituksen.<br />

• Luentomateriaali, harjoitustehtävät, luennolla laaditut<br />

ohjelmat ja harjoitusten mallivastaukset löytyvät verkkoosoitteesta<br />

www.pori.tut.fi/~miksa/java.<br />

PISTEET ARVOSANA<br />

27 5<br />

24 4<br />

21 3<br />

18 2<br />

15 1<br />


Java-kirjoja<br />

• Mika Vesterholm, Jorma Kyppö:<br />

Java-ohjelmointi,<br />

Talentum 2008, ISBN 978-952-14-1356-8<br />

(7.uudistettu painos)<br />

• Simo Silander, Vesa Ollikanen, Juha Peltomäki:<br />

Java,<br />

WSOY 2010, ISBN 978-951-846-237-2<br />

• Jukka Harju, Jukka Juslin:<br />

Java-ohjelmointi – opas ammattimaiseen<br />

osaamiseen,<br />

Readme.fi 2009, ISBN 978-952-220-084-6<br />

4


Java-ohjelmointikielen yleisyys<br />

TIOBE Programming Community Index (ohjelmoijia, kursseja, toimijoita)<br />

5


Ohjelmointikielten käytön kehitys<br />

6


OHJELMANKEHITYS<br />

JAVA-YMPÄRISTÖSSÄ<br />

7


Ohjelman suoritus tietokoneessa<br />

prosessori keskusmuisti levymuisti<br />

käskykanta<br />

compile<br />

execute<br />

Editori<br />

Ohjelma<br />

Kääntäjä/Tulkki<br />

open<br />

save<br />

Tiedot<br />

Ohjelma<br />

tiedostot<br />

8


Java-kielen tulkitseminen<br />

”AJAMINEN”<br />

SYÖTTÖTIEDOT<br />

ohjelma.java<br />

ohjelma.class<br />

OMA OHJELMA<br />

LAUSEKIELELLÄ<br />

KÄÄNTÄJÄ<br />

KONEKIELELLÄ<br />

OMA OHJELMA<br />

VÄLIKIELELLÄ<br />

(tavukoodi)<br />

TULKKI<br />

JVM:ssä<br />

(JRE)<br />

Editori<br />

JDK<br />

JAVAN<br />

KIRJASTOT<br />

TULOSTIEDOT<br />

11


Työvälineiden asennus<br />

• Java SE 7 (JDK, JRE)<br />

– dokumentaatio<br />

• Eclipse Kepler<br />

• NetBeans 7.3<br />

• JCreator<br />

• jGrasp<br />

• JBuilder<br />

• Linkit kurssin sivuilla<br />

• Käyttöopetus harjoituksissa<br />

12


Editori ja dokumentaatio<br />

Projekti, lähdekielihakemistot , package, luokka,…<br />

13


ALGORITMINEN AJATTELU<br />

14


Ongelman hahmottaminen ohjelmaksi<br />

PALVELU<br />

Input → Output<br />

TIEDOT<br />

Muuttujat<br />

TOIMINTA<br />

Prosessi<br />

4 8<br />

LUKU1<br />

LUKU2 … LUVUT<br />

…<br />

KESKIARVO<br />

Tiedot toiminnan kuvauksesta<br />

1. Lisää summaan annetut luvut<br />

2. Jaa summa lukujen määrällä<br />

Puoliohjelma<br />

Peräkkäin<br />

Toisto<br />

Valinta<br />

6<br />

VASTAUS<br />

VASTAUS<br />

Hahmottamisprosessi ongelmasta ratkaisuun:<br />

toiminnan ymmärtäminen + algoritmin keksiminen + tekniikan osaaminen + ohjelmointitekniikkaa<br />

15


Keskiarvo-vuokaavio<br />

KESKIARVO<br />

LUE<br />

LUKU<br />

LUKU >= 0<br />

E<br />

K<br />

VASTAUS=<br />

VASTAUS+LUKU<br />

N=N+1<br />

VASTAUS=<br />

VASTAUS / N<br />

TULOSTA<br />

VASTAUS<br />

LOPPU<br />

16


Keskiarvo-puoliohjelma<br />

VASTAUS = 0, N = 0, LUKU<br />

PERÄKKÄISYYS<br />

LUVUT<br />

L:<br />

LUE LUKU<br />

JOS LUKU < 0 MENE LOPPU<br />

VALINTA<br />

Peräkkäin<br />

Valinta<br />

Toisto<br />

VASTAUS = VASTAUS + LUKU<br />

N = N + 1<br />

MENE L<br />

TOISTO<br />

VASTAUS<br />

LOPPU:<br />

VASTAUS=VASTAUS / N<br />

TULOSTA VASTAUS<br />

17


Java-ohjelman rakenne<br />

L:<br />

PUOLIOHJELMA<br />

VASTAUS = 0, N = 0, LUKU<br />

LUE LUKU<br />

JOS LUKU < 0 MENE LOPPU<br />

JAVA-OHJELMA<br />

public class Keskiarvo {<br />

public static void main(String[] args) {<br />

double vastaus=0, luku;<br />

int n=0;<br />

VASTAUS = VASTAUS + LUKU<br />

N = N + 1<br />

MENE L<br />

LOPPU:<br />

VASTAUS=VASTAUS / N<br />

TULOSTA VASTAUS<br />

}<br />

}<br />

luku = Lue.desi( );<br />

while (luku != 0) {<br />

vastaus = vastaus + luku; vastaus += luku;<br />

n = n + 1;<br />

n++;<br />

luku = Lue.desi( );<br />

}<br />

vastaus = vastaus / n;<br />

vastaus /= n;<br />

System.out.println(”Keskiarvo on ”+vastaus);<br />

18


Ohjelman laatimisen vaiheet<br />

• Editori kuntoon<br />

– Perspektiivit, workspacet, working setit,…<br />

– Projektit<br />

– Lähdekoodikansiot (java)<br />

– Tuloskoodikansio (class)<br />

• Koodin kirjoitus editorilla<br />

• Kääntäminen<br />

• Virheen jäljitys<br />

– Välitulosteet<br />

– Debuggaus<br />

• Testaus<br />

• Integrointi järjestelmään<br />

• Käyttöönotto<br />

19


Luentoharjoitus 1<br />

Minkälaisia asioita teet päivittäin<br />

a) peräkkäin<br />

b) toistuvasti<br />

c) valitsemalla<br />

Eroaako ihminen tietokoneesta ?<br />

20


Luentoharjoitus 2<br />

Tehdään ohjelma, joka antaa käyttäjän<br />

pelata sudokua. Minkälaisia tehtäviä ja<br />

missä järjestyksessä ne suoritetaan.<br />

21


Luentoharjoitus 3<br />

Muuttuja SALDO = 10 000 euroa.<br />

Muuttuja KORKO = 4 %.<br />

Muuttuja VUODET = 5 vuotta.<br />

Laadi (puoli)ohjelma, joka kertoo, kuinka paljon<br />

rahaa tilillä on VUODET-muuttujan osoittaman<br />

vuosimäärän kuluttua.<br />

KorkoWhile.java<br />

22


Luentoharjoitus 4<br />

Laadi radioaktiivisen aineen puoliintumisen<br />

laskeva (puoli)ohjelma siten, että ohjelma<br />

ilmoittaa, milloin radioaktiivisuuden taso on<br />

laskenut alle annetun arvon.<br />

Mitä muuttujia ohjelmassa tarvitaan?<br />

Puoliintumisaika.java<br />

23


JAVAN KIRJOITUSTYYLI<br />

TIETOTYYPIT<br />

OPERAATIOT<br />

http://www.oracle.com/technetwork/java/codeconv-138413.html<br />

24


Tekstin jako riveille<br />

Sisennykset<br />

Välilyönnit<br />

Sijoittelu<br />

while (paaoma > 0) {<br />

velkaMarkat = paaoma - lyhennys;<br />

if (velkaMarkat


Kommentit<br />

/* Usearivisiä<br />

kommentteja voi<br />

rajata näin<br />

*/<br />

// Loppurivi tulkitaan kommentiksi<br />

lyhennys=paaoma; // Tässä kommentoin yhtä riviä<br />

/** Javadoc-ohjelma näyttää tämän dokumentoinnissa */<br />

26


Kommentit<br />

/*******************************************************************************<br />

• Kuvaus: Ohjelma laskee annetun luvun kertoman (tehtävä 22)<br />

• Tekijä: Markku Nevanranta 10.8.2012 (opiskelijanumero)<br />

• Muutettu: 9.8.2013 mn Syttötietojen tarkistus lisätty<br />

• Julkiset metodit:<br />

• public void lueLuku() kysyy luvun<br />

• public int tulostaLuku() tulostaa kertoman<br />

• *****************************************************************************/<br />

27


Tunnukset<br />

• Tunnukseksi kutsutaan nimeä, jonka ohjelmoija antaa jollekin nimettävälle<br />

asialle: muuttujalle, metodille, vakiolle, luokalle,…<br />

• Tunnusten nimet ovat pituudeltaan rajoittamattomia<br />

– merkkejä, numeroita<br />

– Unicode: å, ä, ö<br />

– pienet ja isot kirjaimet ovat eri merkkejä (palkka, Palkka)<br />

– luokkien nimissä ei å, ä, ö merkkejä<br />

• Muuttujien nimet on hyvä alkaa pienellä kirjaimella<br />

• Monisanaiset muuttujien toinen, kolmas jne. sanat alkavat isoilla kirjaimilla<br />

• Silmukkalaskureina käytetään lyhyitä (yksikirjaimisia) muuttujanimiä<br />

• Luokkien nimet alkavat isolla kirjaimella<br />

• Vakiot kirjoitetaan kokonaan isolla<br />

28


Tunnukset<br />

int laskuri, kuukaudenNumero, palkkaVero;<br />

for (int i=0; i


Biteistä tiedoksi<br />

OHJELMA<br />

TIEDOT<br />

luku=arvo+2<br />

ASIAKAS<br />

string etunimi<br />

string sukunimi<br />

int luku<br />

string osoite<br />

Kalle Kehveli<br />

45<br />

Kotikuja 5<br />

ADD R1,123<br />

KalleKehveli45Kotikuja 5<br />

tulkinta/koodaus?<br />

1001100100100111<br />

1001100100100111<br />

30


Muuttujan rakenne<br />

• Yksi kenttä: muuttuja = arvo<br />

• Rakenne eli monta kenttää: muuttuja = osoite<br />

• Esimerkiksi:<br />

– Asetus summa = palkka; henkilö = asiakas;<br />

– Vertailu summa == palkka; henkilö == asiakas;<br />

KESKUSMUISTI<br />

OHJELMA<br />

palkka<br />

Asiakas<br />

• nimi<br />

• kunta<br />

• saldo<br />

9500<br />

KALLE VIRTANEN<br />

PORI<br />

10000<br />

kuukaudet[ ]<br />

31 28 31 30 31 30 31 31 30 31 30 31<br />

31


Perustietotyypit<br />

TYYPPI BITTEJÄ ARVOALUE<br />

byte 8 -128 – 127<br />

short 16 -32768 - 32767<br />

int 32 -2147483648 - 2147483647<br />

long 64<br />

-9223372036854775808 –<br />

9223372036854775807<br />

float 32 1.4*10 -45 – 3.4*10 38 (7 tarkkuus)<br />

double 64 4.9*10 -324 – 1.8*10 308 (15 tarkkuus)<br />

char 16 ’a’ ’\n’ ’\\’ numero (Unicode koodi)<br />

boolean<br />

enum<br />

true, false<br />

{arvoluettelo}<br />

32


Tyyppimuunnokset<br />

AUTOMAATTINEN<br />

MUUNNOS<br />

int a;<br />

long b;<br />

b = a;<br />

byte 8<br />

short 16<br />

char 16<br />

int 32<br />

float 32<br />

long 64<br />

double 64<br />

OHJELMOIJAN<br />

TEKEMÄ<br />

TYYPPIMUUNNOS<br />

int a;<br />

long b;<br />

a = (int) b;<br />

Järkevissä tapauksissa<br />

tehdään järkeviä katkaisuja.<br />

Järjettömissä tapauksissa<br />

vastuu on ohjelmoijalla.<br />

33


Luentoharjoitus 5<br />

Mitkä tietotyypit ovat sopivia seuraaville tiedoille?<br />

• Nimi<br />

• Palkka<br />

• Ikä<br />

• Syntymäaika<br />

• Puhelinnumero<br />

• Tieto luottokelpoisuudesta<br />

34


Perusoperaatiot<br />

(presedenssi ja assosiatiivisuus)<br />

[ ] . ( ) e++ e--<br />

++e --e +e -e ! ~<br />

new (tyyppi)e<br />

* / %<br />

+ -<br />

> >>><br />

< > >= > säilyttää etumerkin<br />

>> lisää nollan<br />

&<br />

^<br />

|<br />

&&<br />

||<br />

?:<br />

= += -= *= /= %= = >>>= &= ^= |=<br />

35


Esimerkki (operaatioita)<br />

/*Keskiarvon laskentaohjelma<br />

Markku Nevanranta<br />

31.8.2009 */<br />

public class Keskiarvo {<br />

public static void main(String[] args) {<br />

double vastaus=0, n=0, luku;<br />

}<br />

}<br />

luku = Lue.desi( );<br />

while (luku != 0) {<br />

vastaus += luku; //kerätään summaa<br />

n++;<br />

//lasketaan lukujen määrä<br />

luku = Lue.desi( );<br />

}<br />

vastaus /= n;<br />

System.out.println(”Keskiarvo on ”+vastaus);<br />

36


Esimerkki (bittioperaatiot)<br />

public class Maski {<br />

public static void main(String[] args) {<br />

final int LUKU = 1; //001<br />

final int KIRJOITUS = 2; //010<br />

final int SUORITUS = 4; //100<br />

int liput = 0;<br />

liput |= LUKU; //liput = 001<br />

liput |= KIRJOITUS; //liput = 011<br />

}<br />

}<br />

if ((liput & KIRJOITUS) == KIRJOITUS)<br />

System.out.println(”On oikeus kirjoittaa”);<br />

38


Lukeminen (Lue)<br />

Lukeminen voidaan tehdä monella tasolla:<br />

1. Lue-luokkaa käyttäen<br />

• Rakennetaan itse omaan tarpeeseen sopiva<br />

luokka<br />

luku = Lue.koko(”Anna luku: ”);<br />

Lue.koko()<br />

Lue.desi()<br />

Lue.rivi()<br />

Lue.merkki()<br />

Lue.totuus()<br />

lukee kokonaisluvun<br />

lukee desimaaliluvun<br />

lukee rivin tekstiä<br />

lukee yhden merkin<br />

lukee totuusarvon<br />

KorkoWhile.java<br />

40


Lukeminen (Scanner)<br />

2. Scanner-luokkaa käyttäen<br />

• Käsittelee tietovirrasta tulevaa merkkijonoa<br />

import java.util.Scanner;<br />

Scanner lukija = new Scanner(System.in);<br />

System.out.println(”Anna luku: ”);<br />

luku = lukija.nextInt();<br />

KorkoScanner.java<br />

41


Lukeminen (tietovirta)<br />

3. Tietovirtoja käyttäen<br />

static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));<br />

public static int kluku(){<br />

int arvo=-1;<br />

boolean ok;<br />

do {<br />

try {<br />

arvo=Integer.parseInt(stdin.readLine());<br />

ok=true;<br />

} catch (Exception e) {<br />

System.out.println("Kelvoton kokonaisluku. Anna uusi!");<br />

ok=false;<br />

}<br />

} while (!ok);<br />

return arvo;<br />

}<br />

42


Tulostus<br />

System-luokan out-tietovirtaluokan metodeita*<br />

Muotoilematon<br />

• System.out.println (”tulostuva teksti ja rivinvaihto”);<br />

• System.out.print (”teksti ilman rivinvaihtoa”);<br />

• System.out.println (”hinta on ”+maksu+” euroa”);<br />

• System.out.println (”hinta on ”+(maksu+1.5*vero)+” euroa”);<br />

Muotoiltu<br />

• System.out.printf(”vakioteksti ja mutoilut”,muuttujaluettelo);<br />

• System.out.printf(”hinta on %d euroa”, maksu);<br />

• System.out.printf(”hinta on %5d euroa”, maksu);<br />

System.out.printf(”hinta on %.2f euroa”, maksu);<br />

• System.out.printf(”hinta on %10.2f euroa”, maksu); //pyöristys<br />

• System.out.printf(”Tässä teksti\n %s \nteksti loppui”, teksti);<br />

* katso dokumentaatiota (System.*, in/out/err, format string syntax)<br />

43


OHJAUSRAKENTEET<br />

45


IF-ehtolause<br />

if (ehto)<br />

lauseet<br />

else<br />

lauseet<br />

LOHKO ELI<br />

KOOTTU LAUSE<br />

if (ika>20)<br />

tulot=opintolaina;<br />

else<br />

tulot=100;<br />

if (ika>20) {<br />

tulot=opintolaina;<br />

vuokra=1000;<br />

}<br />

else {<br />

tulot=100;<br />

karkkiin=30;<br />

}<br />

46


Ehto-osa<br />

VERTAILU-<br />

OPERAATIOT<br />

LOOGISET<br />

OPERAATIOT<br />

><br />

>=<br />

<<br />


Monitasoinen IF<br />

if (koulutus.equals(”DI”)) {<br />

if (ohjelmointitaito==’k’)<br />

}<br />

else<br />

palkka=20000;<br />

palkka=15000;<br />

if (koulutus.equals(”DI”))<br />

if (ohjelmointitaito==’k’)<br />

palkka=20000;<br />

else<br />

palkka=15000;<br />

if (koulutus.equals(”DI”)) {<br />

if (ohjelmointitaito==’k’)<br />

palkka=20000;<br />

} else<br />

palkka=15000;<br />

palkka=15000;<br />

if (koulutus.equals(”DI”) &&<br />

ohjelmointitaito==’k’)<br />

palkka=20000;<br />

Huomaa! Ulompi if sisältää yhden<br />

lauseen – ei sulkeita<br />

Vastaako valkoista tai vihreää ehtoa?<br />

48


IF-esimerkkejä<br />

Onko samat?<br />

if (ika=1000000)…<br />

if (ika>20 || omaisuus


Esimerkki (ehto-operaattori)<br />

if (arvosana>0)<br />

System.out.println(“Tentti on hyväksytty”);<br />

else<br />

System.out.println(“Tentti on hylätty”);<br />

System.out.println(“Tentti on “ + (arvosana>0 ? “hyväksytty” : “hylätty”));<br />

50


switch (lauseke) {<br />

case vakio1: lauseet;<br />

break;<br />

case vakio2:<br />

case vakio3: lauseet;<br />

case vakio4: lauseet;<br />

break;<br />

default: lauseet;<br />

break;<br />

}<br />

SWITCH-valintalause<br />

51


SWITCH-esimerkki1<br />

int kk;<br />

do {<br />

kk=Lue.koko();<br />

switch (kk) {<br />

case 1: System.out.println(”Tammikuu”); break;<br />

case 2: System.out.println(”Helmikuu”); break;<br />

case 3: System.out.println(”Maaliskuu”); break;<br />

case 4: System.out.println(”Huhtikuu”); break;<br />

case 5: System.out.println(”Toukokuu”); break;<br />

case 6: case 7: case 8: System.out.println(”Kesä”); break;<br />

case 9: System.out.println(”Syyskuu”); break;<br />

case 10: System.out.println(”Lokakuu”); break;<br />

case 11: System.out.println(”Marraskuu”); break;<br />

case 12: System.out.println(”Joulukuu”); break<br />

default: System.out.println(”Virheellinen kuukausinumero”);<br />

}<br />

} while (kk != 0);<br />

52


SWITCH-esimerkki2<br />

String kk;<br />

do {<br />

kk=Lue.rivi();<br />

switch (kk) {<br />

case "Maaliskuu":<br />

case "Huhtikuu":<br />

case "Toukokuu": System.out.println("Kevät"); break;<br />

case "Kesäkuu":<br />

case "Heinäkuu":<br />

case "Elokuu": System.out.println("Kesä"); break;<br />

case "Syyskuu":<br />

case "Lokakuu":<br />

case "Marraskuu": System.out.println("Syksy"); break;<br />

case "Joulukuu": case "Tammikuu": case "Helmikuu": System.out.println("Talvi"); break;<br />

default: System.out.println("Virheellinen kuukausi");<br />

}<br />

} while (kk.equals(""));<br />

53


WHILE-toistolause<br />

while (jatkamisehto)<br />

toistettavat lauseet<br />

jatkamisehto suoritetaan joka toistokerran<br />

alussa ja toistettavat lauseet<br />

suoritetaan jos jatkamisehto on<br />

tosi<br />

54


WHILE-esimerkkejä<br />

int i=0;<br />

while (i


FOR-toistolause<br />

for (alkuasetus; jatkamisehto; etenemisaskel)<br />

toistettavat lauseet<br />

alkuasetus<br />

suoritetaan kerran ennen toistojen<br />

aloittamista<br />

jatkamisehto totuusarvoinen lauseke, joka tarkistetaan<br />

ennen jokaista toistokertaa ja jos se on<br />

tosi suoritetaan toistettavat lauseet<br />

etenemisaskel lause joka suoritetaan jokaisen<br />

toistokerran jälkeen<br />

56


FOR-esimerkkejä<br />

for (int i=0; i


FOR-esimerkkejä<br />

for (int i=0; i


FOREACH-tyyppinen toistolause<br />

for (tyyppi muuttuja: kokoelma)<br />

toistettavat lauseet<br />

tyyppi<br />

muuttuja<br />

kokoelma<br />

kokoelmasta poimittavan tiedon tyyppi<br />

kokoelmasta poimittava tieto<br />

kokoelma josta tietoalkiot poimitaan yksi<br />

kerrallaan ja sillä suoritetaan toistettavat<br />

lauseet<br />

59


FOREACH-esimerkki<br />

for (int luku : taulu)<br />

System.out.println(luku);<br />

taulu<br />

2 45 56 67<br />

60


DO-toistolause<br />

do<br />

toistettavat lauseet<br />

while (jatkamisehto)<br />

Miten eroaa while-lauseesta?<br />

61


DO-esimerkki<br />

do {<br />

System.out.println(”Anna luku: ”);<br />

luku = Lue.koko();<br />

System.out.println(luku);<br />

} while (luku != 0);<br />

Mitä hyötyä vastaavaan while-lauseeseen?<br />

62


BREAK-lause<br />

Break keskeyttää switch- tai toistolauseen suorituksen<br />

for (int i=1; i


BREAK-lause<br />

Pelkkä break keskeyttää vain sisemmän rakenteen suorituksen<br />

for (int i=0; i


CONTINUE-lause<br />

Keskeytetään toiston meneillään oleva kierros ja aletaan<br />

seuraava kierros<br />

for (int i=1; i


Luentoharjoitus 6<br />

Tulosta kaikista syöttämistäsi luvuista suurin ja<br />

pienin.<br />

Esittele Format<br />

66


Luentoharjoitus 7<br />

Muunna korko-ohjelma for-silmukkaa<br />

käyttäväksi. Jäljitä ohjelman kulku<br />

”debuggerilla”.<br />

67


Luentoharjoitus 8<br />

Tee ohjelma, joka antaa halutun määrän<br />

alkulukuja* yhdestä lähtien.<br />

* Alkuluku on 1 suurempi luonnollinen luku (positiivinen kokonaisluku),<br />

joka on jaollinen vain 1:llä ja itsellään.<br />

68


Luentoharjoitus 9<br />

Vuosi on karkausvuosi, jos se on jaollinen 4:llä,<br />

mutta ei sadalla. 400:lla jaolliset kuitenkin ovat<br />

karkausvuosia.<br />

Laadi vuorovaikutteinen sovellus, joka tulostaa<br />

karkausvuodet käyttäjän pyytämältä<br />

vuosilukuväliltä.<br />

69


Luentoharjoitus 10<br />

Tutki, paljonko sinulla on rahaa 30 vuoden<br />

päästä, jos sijoitat nyt 1000 euroa kasvuosakkeeseen<br />

ja vuosittainen tuotto on 8<br />

prosenttia ja pankin vuosittainen<br />

hallinnointikustannus on<br />

a) 0 prosenttia<br />

b) 2 prosenttia.<br />

Kasvuosake = vuosittain tuotto lisätään pääomaan<br />

70


TAULUKKO<br />

71


Taulukko on olio<br />

int[ ] jono =<br />

new int[5];<br />

jono<br />

0 0 0 0 0<br />

0 1 2 3 4<br />

72


Moniulotteiset taulukot<br />

0 1 2 3 4<br />

int[ ] jono = new int[5]; 0 0 0 0 0<br />

double[ ][ ] taulu = new double[3][5];<br />

0<br />

1<br />

2<br />

0 1 2 3 4<br />

0.0 0.0 0.0 0.0 0.0<br />

0.0 0.0 0.0 0.0 0.0<br />

0.0 0.0 0.0 0.0 0.0<br />

char[ ][ ][ ] merkit = new char[3][5][4];<br />

\0 \0 \0 \0 \0<br />

\0 \0 \0 \0 \0<br />

\0 \0 \0 \0 \0<br />

73


Taulukon alustus<br />

int[ ] jono = new int[5];<br />

jono[3] = 8;<br />

jono<br />

0 0 0 8 0<br />

0 1 2 3 4<br />

jono<br />

int[ ] jono = {1,8,3,4,2}; 1 8 3 4 2<br />

0 1 2 3 4<br />

74


Taulukon alustus<br />

String[ ] nimet = {”Liisa”,”Aki”,”Ville”,”Juha-Matti”,”Mia”};<br />

0<br />

1<br />

2<br />

3<br />

4<br />

L i i s a<br />

A k i<br />

V i l l e<br />

J u h a – M a t t i<br />

M i a<br />

boolean[ ][ ] totuus = {{true,true,false}, {false,true,false}};<br />

true true false<br />

false true false<br />

75


Taulukkosääntöjä<br />

• Taulukon alkiot ovat samaa tyyppiä<br />

• Indeksi int-tyyppinen<br />

• Ensimmäisen alkion indeksi on 0<br />

• Vasta suoritusvaiheessa huomataan indeksin ylitys<br />

• Rivien määrä: taulu.length<br />

• Sarakkeiden määrä: taulu[3].length<br />

• Taulukot alustetaan aina (olio)<br />

• Taulukkomuuttuja voi osoittaa eri taulukko-olioihin<br />

kunhan ne ovat samanmuotoisia ja -tyyppisiä<br />

• Taulukot eivät automaattisesti kasva suorituksen<br />

aikana, mutta ohjelmoija voi pidentää taulukkoa<br />

76


Taulukon läpikäynti<br />

for (int i=0; i


Epätasainen taulukko<br />

Tasainen taulukko<br />

int[ ][ ] taulu = new int[3][2];<br />

int[ ][ ] taulu = {{1,2}, {5,9}, {3,2}};<br />

0 1<br />

0 1 2<br />

1 5 9<br />

2 3 2<br />

Epätasainen taulukko<br />

taulu<br />

int[ ][ ] taulu = new int[3][ ];<br />

taulu[0] = new int[2];<br />

taulu[1] = new int[3];<br />

taulu[2] = new int[1];<br />

78


Epätasaisen taulukon alustus<br />

Toimiiko molemmat?<br />

int[ ][ ] matriisi = {{1,2}, {5,9,7}, {3}};<br />

int[ ][ ] taulu = new int[3][ ];<br />

taulu[0] = {1,2};<br />

taulu[1] = {5,9,7};<br />

taulu[2] = {3};<br />

taulu<br />

1 2<br />

5 9 7<br />

3<br />

79


Esimerkkejä<br />

public class Taulu {<br />

public static void main(String[] args) {<br />

int[ ] jono= {3,0,7,2,9};<br />

int[ ][ ] sarja= {{2,4,6},{20,40,60}};<br />

for(int i=0; i


Esimerkkejä<br />

int[ ] jono = new int[5];<br />

0 0 0 0 0<br />

int[ ] sarja = {2,4,6,8,3};<br />

2 4 6 8 3<br />

sarja = jono;<br />

Mitä tapahtuu alemmalle taulukolle?<br />

Voit muuttaa tietoa toisen viitteen<br />

kautta ja muutos näkyy toisenkin<br />

viitteen kautta.<br />

81


Javan taulukkoluokkia<br />

• System.arrayCopy<br />

• ArrayList<br />

• Arrays<br />

– asList<br />

– binarySearch<br />

– equals<br />

– fill<br />

– Sort<br />

– toString<br />

82


Luentoharjoitus 11<br />

Koskien yksiulotteista positiivisten kokonaislukujen<br />

taulukkoa tulosta<br />

(8.1)<br />

a) alustettu taulukko<br />

b) taulukon arvojen summa<br />

c) ensimmäisen nollan indeksi<br />

d) taulukon suurin arvo ja sen indeksi<br />

e) taulukon arvojen prosentuaaliset osuudet<br />

83


Luentoharjoitus 12<br />

Tee ohjelma, joka automaattisesti laajentaa<br />

taulukkoa, kun lisäät siihen liikaa lukuja.<br />

84


Luentoharjoitus 13<br />

Tee ohjelma, joka tarkastaa antamasi<br />

lottorivin satunnaisesti luodun lottorivin<br />

kanssa. (8.6)<br />

* Math.random() antaa satunnaisluvun väliltä 0-1<br />

85


Luentoharjoitus 14<br />

Tutki, montako satunnaislukua * suunnilleen<br />

pitää tuottaa välillä 1-10, jotta kaikkia lukuja<br />

alkaa tulla suunnilleen sama määrä. (8.12)<br />

* Math.random() antaa satunnaisluvun väliltä 0-1<br />

86


Luentoharjoitus 15*<br />

Yksiulotteinen taulukko kuvaa joukko-opin<br />

joukkoa, jossa sama luku ei esiinny kahdesti.<br />

Laadi kahden joukon välille vähintään seuraavat<br />

kolme joukko-opin operaatiota, joista kukin<br />

palauttaa tulosjoukon 1 .<br />

YHDISTE yhdistää joukot tulosjoukoksi.<br />

LEIKKAUS palauttaa tulosjoukon, jossa on vain<br />

yhteiset alkiot.<br />

EROTUS palauttaa tulosjoukossa vain ne<br />

ensimmäisen joukon alkiot, joita ei ole toisessa<br />

joukossa.<br />

1) Voi käyttää tyypillisiä taulukon toimintoja: poista duplikaatit, tiivistä, lajittele,...<br />

87


MERKKIJONO<br />

91


Merkkijono-olion luonti<br />

Merkkijono<br />

String lemmikki = ”kissa”;<br />

Merkkitaulukko<br />

char[ ] eläin = {’k’, ’o’, ’i’, ’r’, ’a’};<br />

Merkkijonotaulukko<br />

String[ ] tarha = {”leijona”, ”seepra”, ”kameli”};<br />

92


Merkkijono metodit<br />

public int length() antaa merkkijonon pituuden<br />

String jono = ”kissa”;<br />

int pituus = jono.length(); // pituus=5<br />

public boolean equals(String) palauttaa true jos<br />

merkkijonot samat<br />

do {<br />

System.out.println(”Jatkatko (kyllä tai ei) ”);<br />

String vastaus = Lue.rivi();<br />

} while (vastaus.equals(”kyllä”));<br />

public boolean equalsIgnoreCase(String)<br />

93


Merkkijono metodit<br />

public int compareTo(String)<br />

Palauttaa numeron, joka ilmaisee merkkijonojen aakkosjärjestyksen:<br />

0 verrattava merkkijono on parametrimerkkijonon jälkeen<br />

System.out.print(”Anna eka merkkijono ”);<br />

String eka = Lue.rivi();<br />

System.out.print(”Anna toka merkkijono ”);<br />

String toka = Lue.rivi();<br />

int jarjestys= eka.compareTo(toka);<br />

if (jarjestys < 0) System.out.println(”Eka ensin”);<br />

if (jarjestys == 0) System.out.println(”Yhtäsuuret”)<br />

if (jarjestys > 0) System.out.println(”Toka ensin”):<br />

94


Merkkijono metodit<br />

public String toLowerCase()<br />

Muuttaa merkkijonon pieniksi kirjaimiksi.<br />

public String toUpperCase()<br />

Muuttaa merkkijonon isoiksi kirjaimiksi.<br />

String lemmikki = ”Kissa”;<br />

lemmikki = lemmikki.toLowerCase();<br />

System.out.println(lemmikki+lemmikki.toUpperCase());<br />

public String trim()<br />

Poistaa merkkijonon alusta ja lopusta välilyönnit.<br />

String lemmikki = ” Kissa”;<br />

lemmikki = lemmikki+”eläin ”;<br />

System.out.println(lemmikki.trim());<br />

95


Merkkijono metodit<br />

public char charAt(int index)<br />

Palauttaa merkkijonon yhden merkin.<br />

Huomaa kuvaava parametrin nimi.<br />

String lemmikki = ”Kissa”;<br />

for (int i=0; i


Merkkijono metodit<br />

public String substring(int startInd, int endInd)<br />

Palauttaa merkkijonosta osamerkkijonon lähtien merkkipaikasta<br />

startInd merkkiin endInd-1 asti.<br />

String lemmikki=”lemmikkikissa”;<br />

String suosikki=lemmikki.substring(3,8); //mikki<br />

String teksti = ”Hyvä ? olet voittanut paljon rahaa!”;<br />

String nimi = Lue.rivi();<br />

String kirje = teksti.substring(0,5)+nimi+teksti.substring(6);<br />

Hyvä Markku Nevanranta olet voittanut paljon rahaa!<br />

97


Merkit merkkijonoksi<br />

Muunna merkkijonon A-merkit a-merkeiksi.<br />

public class MerkkiMuunnos{<br />

public static void main(String[] args){<br />

String teksti, tulos;<br />

teksti = Lue.rivi ("Anna merkkijono ");<br />

// Merkkijono merkkitaulukoksi<br />

char[] mtaulu = teksti.toCharArray();<br />

for (int i=0; i


Merkkijonoista<br />

• Unicode-merkistö \uxxxx<br />

• Escape-esitys (esim. \n, \t, \\, \”)<br />

• Merkkijonon pituus tallessa merkkijono-oliossa<br />

• Merkkien vertailu: vastaus == ’k’<br />

• Merkkijonojen vertailu:<br />

– lemmikki==”kissa” (väärin)<br />

– lemmikki.equals(”kissa”) (oikein)<br />

• Perustietotyyppi merkkijonoksi:<br />

– ”numero ”+luku+” tekstiksi”<br />

– String.valueOf(luku)<br />

• Merkkijono perustietotyypiksi:<br />

– Integer.parseInt(mjono) // JDK 1.2<br />

– new Integer(mjono) // JDK 1.5<br />

(Byte, Short, Integer, Long, Float, Double, Boolean, Char kääreluokissa<br />

vastaavat xValue()- ja parsex-metodit)<br />

99


StringBuilder<br />

• Käytä StringBuilder-merkkijonoa jos Stringmerkkijonoa<br />

muutetaan paljon<br />

• StringBufferin synkronoimaton versio<br />

• Metodeja:<br />

– length(), setLength(int)<br />

– append(perustietotyyppi), insert(int paikka, perustietotyyppi)<br />

– replace(int, int, String), delete(int, int)<br />

– charAt(int), setCharAt(int, char)<br />

– substring(int, int)<br />

– toString()<br />

– reverse()<br />

101


StringBuilder esimerkki<br />

String kjono = "kenkä";<br />

StringBuilder sb = new StringBuilder(kjono);<br />

sb.insert(0,"Puu"); //Puukenkä<br />

sb.append("kö"); //Puukenkäkö<br />

sb.delete(4,6); //Puukkäkö<br />

sb.replace(5,8,"o"); //Puukko<br />

String jono3 = sb.toString(); //jono3 = "Puukko"<br />

StringBuilder buf = new StringBuilder();<br />

String jono = buf.append("Puu").append(kjono).toString();<br />

102


StringTokenizer<br />

• Pätkii merkkijonon osajonoiksi (token).<br />

• Metodeja:<br />

– StringTokenizer(String)<br />

– StringTokenizer(String, String delimiters)<br />

– countTokens()<br />

– hasMoreTokens()<br />

– nextToken(), nextToken(String delimiters)<br />

– String.split() metodilla saadaan myös pätkittyä<br />

103


StringTokenizer esimerkki<br />

String pätkittävä = "Matti,Kalle,,Maija";<br />

StringTokenizer st = new StringTokenizer(pätkittävä, ",", false);<br />

while ( st.hasMoreTokens() )<br />

System.out.println(st.nextToken());<br />

st = new StringTokenizer(pätkittävä, ",", true);<br />

while ( st.hasMoreTokens() )<br />

System.out.println(st.nextToken());<br />

Matti<br />

Kalle<br />

Maija<br />

Matti<br />

,<br />

Kalle<br />

,<br />

,<br />

Maija<br />

104


Säännölliset lausekkeet<br />

• Säännöllisten lausekkeiden (regular expression, regexp) avulla<br />

määritetään merkkijonohahmoja, joita voidaan tunnistaa<br />

merkkijonosta<br />

• Hahmoa etsitään matches-metodilla, joka palauttaa true-arvon<br />

jos hahmo löytyy muuten false<br />

• Merkkijono voidaan pilkkoa split-metodilla hahmoon<br />

täsmäävissä kohdissa ja pilkotut merkkijonopalaset palautetaan<br />

merkkijonotaulukkona<br />

• replaceAll-metodi korvaa kaikki hahmoon täsmäävät osat<br />

annetulla merkkijonolla<br />

• ReplaceFirst-metodi korvaa vain ensimmäisen hahmoon<br />

täsmäävän merkkijonon annetulla merkkijonolla<br />

• Pattern ja Matcher luokissa lisää metodeja<br />

105


Hahmon muodostaminen<br />

• Yksinkertainen hahmo: mikä tahansa hakasulkeissa oleva merkki kelpaa<br />

“rahayksikkö [€$£]”, “[ahjmprsv]aha”<br />

• Arvoväli: mikä tahansa arvovälillä oleva merkki kelpaa<br />

“[A-E] ajokortti”, “arvot [1-3 7-9]”<br />

• Yhdiste, leikkaus ja erotus: ehto sisällytetään toiseen ehtoon<br />

“[a-c[1-3]] luokat”, “[1-5&&[3-9]] luokat”, “[1-5&&[^3-9]] luokat”<br />

• Merkkiluokat: mikä tahansa merkki (.), numerot 0-9 (\\d), muu merkki paitsi<br />

0-9 (\\D), kaikki tyhjämerkit (\\s), ei-tyhjä merkki (\\S), mikä tahansa numero<br />

tai merkki (\\w), \\w negaatio (\\W)<br />

• Ryhmittely ja takaisinviittaus: () merkitään yhdessä käsiteltävä ryhmä,<br />

\\numero kertoo montako kertaa ryhmää pitää toistua<br />

• “(.)\\1” (merkki toistuu kaksi kertaa peräkkäin) “((.)\\3 )\\3” (luottokorttinumeron muodon tarkistus)<br />

• Lukumäärät: esiintyy kerran (?), nolla tai useamman kerran (*), kerran tai<br />

useamman kerran (+), täsmälleen n kertaa {n}, vähintään n kertaa {n,},<br />

vähintään n tai enintään m kertaa {n,m}<br />

• Paikkamääreet: rivin alku (^), rivin loppu ($), sanan alku tai loppu (\\b), \\b<br />

negaatio (\\B), syötteen alku (\\A), syötteen loppu (\\z)<br />

106


Esimerkki: säännöllinen lauseke<br />

public class SaannollinenLauseke {<br />

public static void main(String[] args) {<br />

// Luottokortin tarkistus<br />

String luottokortti = "1234 5678 9012 9876";<br />

if (luottokortti.matches("\\d{4}( \\d{4}){3}"))<br />

System.out.println("kortti oikein");<br />

else<br />

System.out.println("kortissa virhe");<br />

// Päivämäärän tarkistus<br />

String pvm = "12.09.2011";<br />

if (pvm.matches("(\\d{1,2}.){2}\\d{4}"))<br />

System.out.println("päivämäärä oikein");<br />

else<br />

System.out.println("päivämäärässä virhe");<br />

// Päivämäärän pilkkominen<br />

String[] sanat = pvm.split("\\.");<br />

for (int i=0; i


Help<br />

• Tutki merkkijonoja HELPistä<br />

• String<br />

• StringBuilder (StringBuffer)<br />

• StringTokenizer<br />

• Integer<br />

• Is-alkuiset: isEmpty(), isAlphapetic(), isDigit(),...<br />

108


Luentoharjoitus 16<br />

Tulosta merkkijono käänteisenä. (7.3)<br />

109


Luentoharjoitus 17<br />

Laske syöttämäsi tekstin merkkien<br />

esiintymismäärät.<br />

a = 97<br />

z = 122<br />

ä = 228<br />

å = 229<br />

ö = 246<br />

A = 65<br />

Z = 90<br />

Ä = 196<br />

Å = 197<br />

Ö = 214<br />

110


Luentoharjoitus 18<br />

Laadi ohjelma, joka tulostaa ryhmäsi<br />

opiskelijoiden nimet satunnaisjärjestyksessä.<br />

111


Luentoharjoitus 19<br />

Laadi henkilötunnuksen<br />

1. muodon oikeellisuuden tarkistusohjelma<br />

2. arvon oikeellisuuden tarkistusohjelma<br />

3. sekä tulosta syntymäaika. (7.11)<br />

112


Luentoharjoitus 20<br />

Testaa, onko teksti ymmärrettävissä jos sekoitat<br />

seuraavasti. Sekoita tekstin jokaisen sanan<br />

merkit lukuunottamatta ensimmäistä ja viimeistä<br />

merkkiä.(7.14)<br />

113


METODIT<br />

114


Metodin muoto<br />

määreet palautetyyppi nimi (parametrit) {<br />

ohjelma<br />

}<br />

määreet<br />

Näkyvyys: public, private<br />

Luokka-/oliokohtaisuus (static)<br />

palautetyyppi Palautettavan arvon tyyppi on<br />

void jos ei palautettavaa arvoa<br />

parametrit<br />

Tyypit ja nimet muuttujille, jotka<br />

ottavat vastaan kutsussa annetut<br />

tiedot<br />

115


Esimerkki (parametrit)<br />

public class Keskiarvo1 {<br />

public static void laskeKeskiarvo(int eka, int toka){<br />

double c;<br />

c = (eka+toka)/2.0;<br />

System.out.println("Keskiarvo on "+c);<br />

}<br />

}<br />

public static void main(String[] args){<br />

int luku1, luku2;<br />

System.out.print("Anna luku1: ");<br />

luku1 = Lue.koko();<br />

System.out.print("Anna luku2: ");<br />

luku2 = Lue.koko();<br />

laskeKeskiarvo(luku1, luku2);<br />

}<br />

116


Esimerkki (palautearvo)<br />

public class Keskiarvo2 {<br />

public static double laskeKeskiarvo(int eka, int toka){<br />

double c;<br />

public class Keskiarvo22 {<br />

c = (eka+toka)/2.0;<br />

public static double laskeKeskiarvo(int eka, int toka){<br />

return c;<br />

return (eka+toka)/2.0;<br />

}<br />

}<br />

}<br />

public static void main(String[] args){<br />

int luku1, luku2;<br />

double tulos1;<br />

System.out.print("Anna luku1: ");<br />

luku1 = Lue.koko();<br />

}<br />

System.out.print("Anna luku2: "); }<br />

luku2 = Lue.koko();<br />

tulos1 = laskeKeskiarvo(luku1, luku2);<br />

System.out.println("Keskiarvo on "+tulos1);<br />

}<br />

public static void main(String[] args){<br />

System.out.print("Anna luku1 ja luku2: ");<br />

System.out.println("Keskiarvo on "+<br />

laskeKeskiarvo(Lue.koko(), Lue.koko()));<br />

Javassa vain<br />

arvoparametreja<br />

(arvon kopiointi)<br />

117


Esimerkki (taulukko)<br />

public class Taulukko1 {<br />

public static void rahaMuunnin(double[] rahaa){<br />

for (int i=0; i


Esimerkki (taulukko)<br />

public class Taulukko2 {<br />

public static double[] rahaMuunnin(double[] rahaa){<br />

double[] muutettuRaha = new double[rahaa.length];<br />

}<br />

for (int i=0; i


Esimerkki (vaihteleva)<br />

Vaihteleva määrä parametreja<br />

public class Vaihtuva {<br />

public static void main (String[] args){<br />

int[] sarja = {3, 5, 7, 9};<br />

int summa = yhteen(sarja);<br />

int tulo = kerro(3,5,7,9);<br />

}<br />

System.out.println("Summa: "+summa);<br />

System.out.println("Tulo: "+tulo);<br />

public static int yhteen (int[] sarja){<br />

int summa = 0;<br />

for (int i=0; i


Esimerkki (kuormittaminen)<br />

public class Keskiarvo3 {<br />

private static double laskeKeskiarvo (double eka, double toka){<br />

return (eka+toka)/2.0;<br />

}<br />

private static double laskeKeskiarvo (int eka, int toka, int kolmas){<br />

return (eka+toka+kolmas)/3.0;<br />

}<br />

public static void main(String[] args){<br />

int luku1, luku2, luku3;<br />

luku1 = Lue.koko("Anna 1. luku: ");<br />

luku2 = Lue.koko("Anna 2. luku: ");<br />

luku3 = Lue.koko("Anna 3. luku: ");<br />

System.out.println("Kolmen luvun keskiarvo on "+<br />

laskeKeskiarvo(luku1, luku2, luku3));<br />

}<br />

}<br />

System.out.println("Kahden luvun keskiarvo on "+<br />

laskeKeskiarvo(luku1, luku2));<br />

121


Esimerkki (rekursiivisuus)<br />

public class Rekursio{<br />

public static void main(String[] args){<br />

String teksti="DIPLOMI-INSINÖÖRI";<br />

tulosta(teksti, 0);<br />

}<br />

public static void tulosta (String merkit, int i){<br />

if (i < merkit.length()){ //pituus=17<br />

System.out.print(merkit.charAt(i));<br />

tulosta(merkit, i+1);<br />

}<br />

}<br />

}<br />

System.out.print(merkit.charAt(i));<br />

122


Luokkamuuttujat<br />

public class Luokkamuuttujat {<br />

private static int summa = 3;<br />

private static int kpl;<br />

public static void main(String[] args){<br />

lisaa (4);<br />

tulosta();<br />

poista (5);<br />

tulosta();<br />

}<br />

private static void lisaa (int luku){<br />

summa += luku;<br />

kpl++;<br />

}<br />

private static void poista (int luku){<br />

summa -= luku;<br />

kpl++;<br />

}<br />

}<br />

private static void tulosta (){<br />

System.out.println("Summa: "+summa);<br />

System.out.println("Kappalemäärä: "+kpl);<br />

}<br />

123


Luentoharjoitus 21<br />

Parametrit ja paluuarvo<br />

Tee metodi tutkiaksesi, montako<br />

satunnaislukua pitää luoda N:stä<br />

mahdollisesta ennen kuin tulee K samaa<br />

arvoa?<br />

• Montako kertaa noppaa pitää heittää ennen kuin tulee<br />

kaksi samaa numeroa?<br />

• Montako henkilöä pitää valita ennen kuin kahdella on<br />

sama syntymäpäivä?<br />

124


Luentoharjoitus 22<br />

Taulukko parametrina<br />

Tee taulukon sekoitusmetodi, joka<br />

sekoittaa saamansa taulukon<br />

mahdollisimman satunnaisesti ja<br />

nopeasti. Metodi palauttaa<br />

sekoitetun taulukon. Tulosta<br />

alkuperäinen ja sekoitettu taulukko.<br />

125


Luentoharjoitus 23<br />

Valmiiden luokkien käyttö<br />

Luo Random-luokan metodin avulla<br />

miljoonan alkion kokonaislukutaulukko.<br />

Lajittele taulukko Array-luokan metodilla.<br />

Sekoita taulukko sekoitusmetodillasi.<br />

Mittaa metodien käyttämä aika Systemluokan<br />

currentTimeMillis-metodilla.<br />

Tulosta ajat.<br />

126


Luentoharjoitus 24<br />

Kuormittaminen<br />

Tee ”Laina”-luokka, jossa on kaksi ”lyhennys” -<br />

nimistä metodia. Toinen metodi saa<br />

lähtötietona velan määrän, vuosikoron ja<br />

maksuerän suuruuden. Toinen saa lähtötietona<br />

velan määrän, vuosikoron ja maksuerien<br />

määrän. Metodit tulostavat taulukon, jossa on<br />

lyhennystietoja lyhennyserittäin (velka, koron<br />

osuus, lyhennyksen osuus).<br />

127


Luentoharjoitus 25<br />

Luokkamuuttujat<br />

Keksi tekstin salakirjoitusmenetelmä, joka<br />

salaamisen lisäksi osaa myös avata salatun<br />

sanoman.<br />

128

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!