5. for-silmukka

for-silmukka

for-silmukka käy läpi tietyllä välillä olevat luvut ja suorittaa jokaisen luvun kohdalla samanlaisen koodin.

Esimerkki

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 muoto

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:

silmukkatulostus
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.

Esimerkki: Viestin toisto

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.

Esimerkki: Kolmen luvun summa

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:

Ymmärräthän varmasti, mihin koodin toiminta perustuu?

Muuttujan nimi

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.

Esimerkki: Kertotaulu

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