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.
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
Villkoret som skall stå inom parenteser skall vara av logisk typ dvs boolean
.
Funktionen kan uttryckas med hjälp av while
-satsen:
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:
-
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
-
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örfor
-satsen för att existera efter loopens slut. -
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 medfor
-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 efterfor
-satsen. Då går det bra utelämna det första uttrycket ifor
-konstruktionen.
Här görs ju resten inne i självafor
-uttrycket och därför blir det inget kvar att skriva inom klamrarna {}.
Övningar (samma som till while
-satsen)
- Skriv satserna som skriver ut kvadraterna på de jämna talen mellan 2 och 30 med ett värde per rad
-
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
- Tips 1: Sätt ett tab-tecken (
"\t"
) mellan talen på samma rad.
- Tips 2: Metoden
System.out.println()
skriver ut ett radbyte.
- Tips 3: Metoden
System.out.print
byter inte rad.
- Tips 1: Sätt ett tab-tecken (
- Skriv satserna som skriver ut alla tal mellan 1 och 100 som är jämnt delbara med 7
- Skriv de satser som räknar hur många 6-or man får vi 100 kast med tärning
-
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.