Introduktion till while-satsen
En vanlig situation är att man vill upprepa några 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 skall vi behandla den förstnämnda.
Skapa först en ny klass ( ) som bara innehållande en (nästan tom) main -metod:
|
public class TestWhile {
public static void main(String[] args) {
System.out.println("Start while-tests");
System.out.println("End of while-tests");
}
}
|
Exempel 1
Antag att vi vill skriva ut värden på kvadratrötterna på talen 1, 2, 3, ... 10.
Kopiera in dessa rader i det tomma utrymmet i main -metoden.Kompilera och testkör! |
double x = 1;
while (x <= 10) {
System.out.println( x + ": " + Math.sqrt(x));
x = x + 1;
}
|
Exempel 2
Antag att vi vill räkna hur många gånger man måste slå en tärning för att få en sexa.
Tärningsslagen simuleras med uttrycket:
(int)(Math.random()*6)+1
som genererar slumpvisa heltal mellan 1 och 6.
Klistra in detta i main -metoden. Kompilera en gång
Provkör flera gånger!
|
int i = 1;
while ( (int)(Math.random()*6)+1 != 6 ) {
i = i + 1;
}
System.out.println("Antal slag: " + i);
|
Allmän form
Villkoret som skall stå inom parenteser skall vara av logisk typ dvs boolean
.
Se lektion om logiska uttryck.
Funktion:
- Beräkna värdet av villkoret
- Om värdet var
true
så utför satserna mellan klamrarna - Beräkna värdet av villkoret igen
- Om värdet var
true
så utför satserna mellan klamrarna - Beräkna värdet av villkoret igen
- ...
Grafiskt kan man beskriva funktionen så här: |
![]() |
Satserna mellan klamrarna är godtyckliga utförande satser: tilldelningar, if
-satser,
while
-satser.
Observera att villkoret måste kunna bli false
- i annat fall
slutar aldrig iterationen.
I det första exemplet så ändras värdet på i
inuti loopen vilket gör
att villkoret blir false
när i blivit större än 10.
I det andra exemplet så beror ju värdet av villkoret på det slumpmässiga resultatet av
Math.random()
vilket förr eller senare kommer göra uttrycket false
(när tärningsslaget blir lika med 6).
Det andra exemplet hade också kunnat skrivas
Slå första slaget
Om det inte blev 6
så slå en gång till
och räkna slagen
Den första lösningen är lite elegantare - man slipper ju upprepa koden för att slå tärningen.
Övningar
- 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. -
Prova vad som händer om man kör exempel 1 utan satsen
i = i + 1
Dölj style3dev.css för att bli av med annoteringarna!