Observera att detta är en arbetsversion av sidan!
Dölj style3dev.css för att bli av med annoteringarna!

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

while ( villkor ) { en eller flera satser }

Villkoret som skall stå inom parenteser skall vara av logisk typ dvs boolean. Se lektion om logiska uttryck.

Funktion:

  1. Beräkna värdet av villkoret
  2. Om värdet var true så utför satserna mellan klamrarna
  3. Beräkna värdet av villkoret igen
  4. Om värdet var true så utför satserna mellan klamrarna
  5. Beräkna värdet av villkoret igen
  6. ...

 

Grafiskt kan man beskriva funktionen så här: Bild

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

int i = 1; int value = (int)(Math.random()*6)+1); while ( value != 6 ) { value = (int)(Math.random()*6)+1); i = i + 1; }

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

  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.
  6. Prova vad som händer om man kör exempel 1 utan satsen i = i + 1

Valid CSS!