1. Slingor i vårt liv

Mycket ofta kräver våra liv att vi utför samma handlingar många gånger. Anta till exempel att jag behöver skanna ett dokument som består av många sidor. Att vi upprepar samma procedur om och om igen:

  • Lägg den första sidan på skannern
  • Tryck på skanningsknappen
  • Lägg nästa sida på skannern

Detta är svårt att göra manuellt. Det skulle vara trevligt om denna process på något sätt kunde automatiseras.

Eller överväg ett annat exempel: låt oss säga att jag vill markera alla olästa e-postmeddelanden i min inkorg som skräppost. En gång i tiden måste jag välja varje e-postmeddelande ett i taget och markera det som skräppost.

Men programmerare är lata, så de automatiserade den här processen för länge sedan: nu väljer du helt enkelt valfri lista med bokstäver och klickar på "markera som skräppost", och sedan kör din e-postklient genom listan och flyttar varje e-postmeddelande till skräppostmappen.

Vad kan vi säga här? Det är superbekvämt när en dator eller ett program kan utföra hundratals eller tusentals monotona operationer med ett klick. Och nu kommer du att lära dig hur du gör detta också.


2. whileslinga

If-else-satsen utökade avsevärt våra programmeringsmöjligheter, vilket gjorde det möjligt att skriva program som utför olika åtgärder i olika situationer. Men det finns en sak till som kommer att göra våra program till en storleksordning mer kraftfulla — loopar .

Java har 4 typer av loopar: while, for, for-eachoch do-while. Vi ska nu gräva i den allra första av dessa.

En whileslinga är väldigt enkel. Den består av endast två delar: ett tillstånd och en loopkropp . Slingkroppen exekveras om och om igen så länge villkoret är true. I allmänhet whileser en slinga ut så här:

while (condition)
   statement;
Notation för en whileloop med ett enda uttalande
while (condition)
{
   block of statements
}
Notation för en whileloop med ett block av uttalanden

Det är väldigt enkelt. Satsen eller blocket av satser exekveras om och om igen så länge som loopvillkoret är lika .true

Så här fungerar det: först kontrolleras tillståndet . Om det är sant exekveras loopkroppen ( satsen eller blocket av satser ). Sedan kontrolleras villkoret igen och loopkroppen exekveras igen. Och så vidare tills tillståndet blir falskt.

Om villkoret alltid är sant kommer programmet aldrig att sluta köras. Det kommer att vara permanent fast i slingan.

Om villkoret är falskt första gången det kontrolleras , kommer slingans kropp inte att exekveras ens en gång.


3. Exempel på slingor

Här är några praktiska exempel på loopar i aktion.

Koda Förklaring
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
5 rader kommer att visas på skärmen:
5
4
3
2
1
Koda Förklaring
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
10 rader kommer att visas på skärmen:
0
1
...
8
9
Koda Förklaring
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
Programmet läser siffror från tangentbordet så länge siffror skrivs in.
Koda Förklaring
while (true)
   System.out.println("C");
Programmet kommer att skriva ut bokstaven på skärmen i oändlighet .C
Koda Förklaring
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Programmet kommer att läsa rader från tangentbordet

tills exitär inmatad.

I föregående exempel equals()används metoden för att jämföra strängar. Om strängarna är lika, kommer funktionen att returnera true. Om strängarna inte är lika, kommer den att returnera false.



4. Slinga i en slinga

När du lärde dig om villkorliga satser, såg du att du kan använda dem för att implementera komplex logik genom att kombinera flera villkorliga satser. Med andra ord, genom att använda ett ifuttalande i ett ifuttalande.

Du kan göra samma sak med slingor. För att skriva en slinga i en slinga måste du skriva den andra slingan inuti kroppen av den första slingan. Det kommer att se ut ungefär så här:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
whileloop (med ett block av uttalanden ) inuti en annan whileloop

Låt oss titta på tre uppgifter.

Uppgift 1 . Låt oss säga att vi vill skriva ett program som visar ordet Mompå skärmen 4 gånger. En slinga är precis vad vi behöver. Och vår kod kommer att se ut ungefär så här:

Koda Förklaring
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
4 rader kommer att visas på skärmen:
Mom
Mom
Mom
Mom

Uppgift 2 . Vi vill skriva ett program som visar 5 bokstäver As på en enda rad. För att göra detta behöver vi en slinga igen. Så här kommer koden att se ut:

Koda Förklaring
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
Istället för println()kommer vi att använda print(). Annars skulle varje bokstav A hamna på en separat rad.

Skärmutgången blir:
AAAAA

Uppgift 3 . Vi vill visa en rektangel som består av bokstaven As. Rektangeln ska bestå av 4 rader gånger 5 kolumner. För att åstadkomma detta behöver vi nu en kapslad loop. Vi tar helt enkelt vårt första exempel (det där vi matar ut 4 rader) och ersätter koden för att mata ut en rad med koden från det andra exemplet.

Koda Förklaring
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Den yttre öglan är lila. Den använder nvariabeln för att räkna antalet iterationer av slingan.

Den inre slingan är grön. Den använder mvariabeln för att räkna antalet loopiterationer.

Vi måste explicit flytta markören till nästa rad efter att den inre slingan är klar. Annars hamnar alla bokstäver som programmet skriver ut på en rad.

Skärmutgången blir:
AAAAA
AAAAA
AAAAA
AAAAA

De yttre och inre slingorna måste använda olika variabler för att räkna antalet loopiterationer. Vi var också tvungna att lägga till System.out.println()kommandot efter den inre slingan, eftersom den slingan visar bokstaven As på samma rad. När bokstäverna på en rad visas måste någon flytta markören till en ny rad.



5. Jämföra loopar Java vs Pascal

Många av er studerade Pascal på gymnasiet. För att göra det lättare för dig att förstå materialet här, ta en titt på denna jämförelse av whileloopar skrivna i Pascal och Java. Om du inte känner Pascal, hoppa över den här delen.

Pascal Java
i := 3;
While i >= 0 Do
   Begin
      WriteLn(i);
      i := i - 1;
   End;
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
i := 0;
While i < 3 Do
   Begin
      WriteLn(i);
      i := i + 1;
   End;
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
IsExit := False;
While Not isExit Do
   Begin
      ReadLn(s);
      isExit :=  (s = 'exit');
   End;
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
While True Do
   WriteLn('C');
while (true)
   System.out.println("C");
While True Do
   Begin
     ReadLn(s);
     If s = 'exit' Then
       Break;
   End;
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}