1. Sammenligning av loops: forvswhile

En whileloop kan brukes hvor som helst hvor en setning eller gruppe av setninger må utføres flere ganger. Men blant alle mulige scenarier er ett verdt å trekke frem.

Vi snakker om situasjonen når programmereren (programmets skaper) vet på forhånd hvor mange ganger loopen skal utføres. Dette håndteres vanligvis ved å deklarere en spesiell tellervariabel, og deretter øke (eller redusere) variabelen med 1hver iterasjon av løkken.

Alt ser ut til å fungere som det skal, men det er ikke veldig praktisk. Før loopen setter vi tellervariabelens startverdi. Så i tilstanden sjekker vi om den allerede har nådd den endelige verdien. Men vi endrer vanligvis verdien helt på slutten av løkken.

Og hva om kroppen til løkken er stor? Eller hvis vi har flere nestede løkker? Generelt er det i disse tilfellene ønskelig å samle all denne informasjonen om tellervariabler på ett sted. Og det er derfor vi har loopen fori Java. Det ser heller ikke veldig komplisert ut:

for (statement 1; condition; statement 2)
{
   block of statements
}

En whileløkke har bare en betingelse i parentes, men en forløkke legger til to utsagn, atskilt med semikolon.

Virkeligheten er enklere enn den høres ut: kompilatoren konverterer en forsløyfe til en vanlig whilesløyfe som dette:

statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Eller enda bedre, la oss demonstrere dette med et eksempel. De to kodebitene nedenfor er identiske.

valg 1 Alternativ 2
for (int i = 0; i < 20; i++)
{
   System.out.println(i);
}
int i = 0;
while (i < 20)
{
   System.out.println(i);
   i++;
}

Vi har nettopp samlet all koden som gjelder tellervariabelen på ett sted i.

I en forloop utføres setning 1 bare én gang, før selve loopen begynner. Dette kan sees tydelig i den andre kodebiten

setning 2 utføres samme antall ganger som løkkens kropp, og hver gang den utføres etter at hele løkkens kropp er utført


2. Hvor forløkken brukes

Lokken forer sannsynligvis den mest brukte typen loop i Java. Det brukes overalt, for programmerere er det bare klarere og mer praktisk enn en whileloop. Praktisk talt enhver whilesløyfe kan konverteres til en forsløyfe.

Eksempler:

mens loop for løkke
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

Vær oppmerksom på det siste eksemplet. Uttalelsene for arbeid med looptelleren mangler. Det er ingen kontra og ingen uttalelse.

I en forløkke lar Java deg utelate "utsagnet for å initialisere telleren" og "utsagnet for å oppdatere telleren". Selv uttrykket som definerer løkkebetingelsen kan utelates.



3. Nyanser ved bruk av forløkken

Et viktig poeng om bruk av forloops og breakog continueuttalelser.

En breaksetning i en forløkke fungerer på samme måte som i en whileløkke - den avslutter løkken umiddelbart. En continuesetning hopper over løkketeksten, men ikke statement 2(som endrer løkketelleren).

La oss ta en ny titt på hvordan forog whileløkker er relatert.

for (statement 1; condition; statement 2)
{
   block of statements
}
statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Hvis en continuesetning utføres i en forløkke , hoppes resten av blokken med setninger over, men setning 2 (den som fungerer med forløkkens tellervariabel) kjøres fortsatt.

La oss gå tilbake til vårt eksempel med å hoppe over tall som er delbare med 7.

Denne koden vil løkke for alltid Denne koden vil fungere fint
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

Koden som bruker whileløkken vil ikke fungere — i vil aldri være større enn 7. Men koden med løkken forvil fungere fint.



4. Sammenligning for loops: Java vs Pascal

Pascal har forresten også en Forløkke. Generelt har i hovedsak alle programmeringsspråk en. Men i Pascal er det superklart. Eksempler:

Pascal Java
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}