for-silmukka käy läpi tietyllä välillä olevat luvut ja suorittaa jokaisen luvun kohdalla samanlaisen koodin.
Tavallisin for-silmukan muoto on seuraava:
System.out.print("Anna yläraja: "); int ylaraja = Integer.parseInt(input.nextLine()); for (int i = 0; i < ylaraja; i++) { System.out.println(i); }
Esimerkkejä ohjelman tulostuksesta:
Anna yläraja: 5 0 1 2 3 4
Anna yläraja: 8 0 1 2 3 4 5 6 7
Tässä for-silmukka käy läpi kokonaislukuja kasvavassa järjestyksessä.
Ensimmäinen luku on 0, ja silmukka jatkuu ylärajaan asti. Muuttuja
i
saa arvokseen yksi kerrallaan kunkin luvuista.
Yleinen for-silmukan muoto on seuraava:
for ([alkuarvo]; [jatkamisehto]; [muutos]) { [koodi] }
Kohdassa [alkuarvo] määritellään muuttuja, jolle annetaan alkuarvoksi
ensimmäinen läpikäytävä luku. Yllä olevassa esimerkissä määriteltiin
muuttuja i
, jolle annettiin alkuarvoksi 0.
Kohdassa [jatkamisehto] kerrotaan, miten kauan for-silmukka jatkuu. Yllä olevassa esimerkissä ehtona oli, että muuttujan arvo on ylärajaa pienempi.
Kohdassa [muutos] muutetaan muuttujaa halutulla tavalla. Yllä olevassa esimerkissä muuttujan arvoa kasvatettiin aina yhdellä.
Seuraavassa on esimerkkejä erilaisista for-silmukoista:
silmukka | tulostus |
---|---|
for (int i = 2; i < 7; i++) { System.out.println(i); } |
2 3 4 5 6 |
for (int i = 2; i <= 7; i++) { System.out.println(i); } |
2 3 4 5 6 7 |
for (int i = 2; i < 9; i += 2) { System.out.println(i); } |
2 4 6 8 |
for (int i = 7; i > 2; i--) { System.out.println(i); } |
7 6 5 4 3 |
for (int i = 7; i >= 2; i--) { System.out.println(i); } |
7 6 5 4 3 2 |
Mieti jokaisesta yllä olevasta silmukasta, miksi se tulostaa annetut luvut. Tämän jälkeen voit siirtyä eteenpäin.
Seuraava ohjelma toistaa käyttäjän antaman viestin halutun määrän kertoja:
System.out.print("Anna viesti: "); String viesti = input.nextLine(); System.out.print("Anna toistokerrat: "); int kerrat = Integer.parseInt(input.nextLine()); for (int i = 0; i < kerrat; i++) { System.out.println(viesti); }
Ohjelman tulostus voi olla seuraava:
Anna viesti: Kappas kippis! Anna toistokerrat: 5 Kappas kippis! Kappas kippis! Kappas kippis! Kappas kippis! Kappas kippis!
Tässä tapauksessa for-silmukassa olevaa muuttujaa i
ei käytetty
mitenkään silmukan sisällä olevassa koodissa. Silmukan ainoa tarkoitus oli
suorittaa sama koodi halutun määrän kertoja.
Silmukan sisään voi kirjoittaa mitä tahansa koodia. Seuraava ohjelma kysyy käyttäjältä kolme lukua ja ilmoittaa lopuksi niiden summan.
System.out.println("Ohjelma kysyy sinulta kolme lukua..."); int summa = 0; for (int i = 1; i <= 3; i++) { System.out.print("Anna luku " + i + ": "); int luku = Integer.parseInt(input.nextLine()); summa = summa + luku; } System.out.println("Lukujen summa: " + summa);Ohjelman suoritus voi olla seuraava:
Ohjelma kysyy sinulta kolme lukua... Anna luku 1: 5 Anna luku 2: 2 Anna luku 3: 8 Lukujen summa: 15
Huomaa muuttujan summa
käyttötapa: muuttujan arvo on aluksi 0,
ja sitten siihen lisätään yksi kerrallaan käyttäjän antamia lukuja. Yllä
olevassa tilanteessa muuttujan arvo muuttuu seuraavasti:
summa
on 0.
summa
on 0 + 5 = 5.
summa
on 5 + 2 = 7.
summa
on 7 + 8 = 15.
Ymmärräthän varmasti, mihin koodin toiminta perustuu?
Tähän mennessä kaikissa esimerkeissä for-silmukan muuttujan nimi on ollut
i
. Näin ei ole kuitenkaan pakko olla, vaan nimi voi olla mikä
tahansa kelvollinen muuttujan nimi. Kuitenkin yleiseksi tavaksi ohjelmoinnissa
on tullut, että for-silmukan muuttujan nimeksi laitetaan i
.
Joskus for-silmukkoja on useampia sisäkkäin. Näin on seuraavassa esimerkissä,
joka tulostaa kertotaulun. Tässä ulommassa silmukassa muuttujana on
i
ja sisemmässä silmukassa muuttujana on j
.
for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { System.out.print((i * j) + " "); } System.out.println(); }
Ohjelman tulostus on seuraava:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
Ohjelman tulostus ei ole tällaisenaan kovin kaunis, koska luvut ovat eri
riveillä eri kohdissa. Asian voi korjata komennolla
System.out.format
, jolla voi tulostaa luvun annetun levyiseen
kenttään. Seuraava koodi esittelee komentoa:
for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { System.out.format("%4d", (i * j)); } System.out.println(); }
Nyt ohjelman tulostus on seuraava:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100