for-satsen

En vanlig situation är att man vill upprepa några satser flera gånger. För detta använder man så kallade iterationssatser även kallade loopar.

Java har tre olika sådana: while-, for- och do-satserna. Här beskrivs for-satsen.

Exempel: Antag att vi vill summera kvadraterna på talen 1, 2, 3, ..., 10. Det kan göras på följande sätt
Med for-sats: Med while-sats:
int sum = 0; for (int ind = 1; ind <= 10; ind++) { sum = sum + ind*ind; } int sum = 0; int ind = 1; while (ind <= 10) { sum = sum + ind*ind; ind++; }

Efter loopen innehåller sum det efterfrågade värdet medan variabeln ind INTE existerar.

Efter loopen innehåller sum det efterfrågade värdet och variabeln ind värdet 11.

Jämfört med koden för while-satsen har vi alltså placerat uttrycket int i = 1 som första, while-villkoret som andra och uttrycket i++ som tredje element i for-uttrycket. Koden blir på detta sätt lite mer kompakt.

Allmän form

for ( u1; villkor; u2 ) { satser }

Villkoret som skall stå inom parenteser skall vara av logisk typ dvs boolean.

Funktionen kan uttryckas med hjälp av while-satsen:

u1; while (villkor) { satser u2; }

Uttrycket u1 är ofta, som i exemplet ovan, en variabeldeklaration med tilldelning av värde (den variabeln kallas ofta för loopvariabeln eller loopindex). Observera att variabler som deklareras så bara existerar i loopen.

Uttrycket u2 är också ett generellt uttryck men även det är väldigt ofta just en ändring (ökning eller minskning) av loopvariabeln.

Fler exempel:

  1. Kod som beräknar summan 1 + 1/2 + 1/3 + 1/4 + ... + 1/n
    double sum = 0; for (int i=1; i<=n; i++) { sum = sum + 1./i; } // Answer in the variable sum
  2. Om vi i stället vill veta hur många termer som behövs för att summan 1 + 1/2 + 1/3 + 1/4 + ... skall nå eller överstiga ett visst värde så kan koden skrivas så här:
    int i = 1; for (double sum = 0; sum<limit; sum = sum + 1./i) { i++; } // Answer in the variabel i

    Det som förut var en loopvariabel (i) måste nu deklareras utanför for-satsen för att existera efter loopens slut.

  3. I materialet om while-satsen så finns ett exempel som simulerar tärningsslag och räknar hur många slag man måste göra för att få en sexa. Denna kod kan uttryckas så här med for-satsen:
    int i = 1; for ( ; (int)(Math.random()*6)+1 != 6; i++) { } System.out.println(i);

    Vi är alltså tvungna att deklareras variabeln som räknar före for-satsen för att den skall vara definierad efter for-satsen. Då går det bra utelämna det första uttrycket i for-konstruktionen.
    Här görs ju resten inne i själva for-uttrycket och därför blir det inget kvar att skriva inom klamrarna {}.

Övningar (samma som till while-satsen)

  1. Skriv satserna som skriver ut kvadraterna på de jämna talen mellan 2 och 30 med ett värde per rad
  2. Samma som ovan men med 4 värden per rad dvs så här:
    4 16 36 64 100 144 196 256 324 400 484 576 676 784 900
    1. Tips 1: Sätt ett tab-tecken ("\t") mellan talen på samma rad.
    2. Tips 2: Metoden System.out.println() skriver ut ett radbyte.
    3. Tips 3: Metoden System.out.print byter inte rad.
  3. Skriv satserna som skriver ut alla tal mellan 1 och 100 som är jämnt delbara med 7
  4. Skriv de satser som räknar hur många 6-or man får vi 100 kast med tärning
  5. Skriv de satser som räknar (med en while-loop) hur många helår det krävs för att få ett kapital fördubblat med räntan 3 procent.

Valid CSS!