20.11.2014 Views

OHJELMOINTITEKNIIKKA

OHJELMOINTITEKNIIKKA

OHJELMOINTITEKNIIKKA

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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!