1. Jämföra loopar: forvswhile

En whileloop kan användas var som helst där en sats eller grupp av satser måste utföras flera gånger. Men bland alla möjliga scenarier är ett värt att lyfta fram.

Vi pratar om situationen när programmeraren (programmets skapare) i förväg vet hur många gånger loopen ska exekveras. Detta hanteras vanligtvis genom att deklarera en speciell räknarvariabel och sedan öka (eller minska) variabeln med 1varje iteration av loopen.

Allt verkar fungera som det ska, men det är inte särskilt bekvämt. Innan loopen ställer vi in ​​räknarvariabelns initiala värde. Sedan i skicket kontrollerar vi om det redan har nått slutvärdet. Men vi brukar ändra värdet i slutet av loopkroppen.

Och vad händer om slingans kropp är stor? Eller om vi har flera kapslade slingor? I allmänhet är det i dessa fall önskvärt att samla all denna information om räknarvariabler på ett ställe. Och det är därför vi har loopen fori Java. Det ser inte heller särskilt komplicerat ut:

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

En whileloop har bara ett villkor inom parentes, men en forloop lägger till två satser, separerade med semikolon.

Verkligheten är enklare än den låter: kompilatorn konverterar en forloop till en vanlig whileloop så här:

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

Eller ännu bättre, låt oss visa detta med ett exempel. De två kodavsnitten nedan är identiska.

Alternativ 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 precis samlat all kod som hör till räknarvariabeln på ett ställe i.

I en forloop exekveras sats 1 bara en gång, innan själva slingan börjar. Detta kan ses tydligt i det andra kodavsnittet

sats 2 exekveras samma antal gånger som slingans kropp, och varje gång den exekveras efter att hela slingans kropp har exekveras


2. Där forslingan används

Slingan forär förmodligen den mest använda typen av loop i Java. Det används överallt, för programmerare är det bara tydligare och bekvämare än en whileloop. Praktiskt taget vilken whileloop som helst kan omvandlas till en forloop.

Exempel:

medan loop för slinga
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;
}

Var uppmärksam på det sista exemplet. Satserna för att arbeta med loopräknaren saknas. Det finns ingen kontra och inget uttalande.

I en forloop låter Java dig utelämna "påståendet för att initiera räknaren" och "påståendet för att uppdatera räknaren". Även uttrycket som definierar loopvillkoret kan utelämnas.



3. Nyanser av att använda forslingan

En viktig punkt om att använda forloopar och breakoch continueuttalanden.

En breaksats i en forloop fungerar på samma sätt som i en whileloop – den avslutar loopen omedelbart. En continuesats hoppar över loopkroppen, men inte statement 2(vilket ändrar loopräknaren).

Låt oss ta en ny titt på hur foroch whileslingor är relaterade.

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

Om en continuesats exekveras i en forloop , hoppas resten av blocket av satser över, men sats 2 (den som fungerar med slingans forräknarvariabel) exekveras fortfarande.

Låt oss återgå till vårt exempel med att hoppa över tal som är delbara med 7.

Den här koden kommer att loopa för alltid Den här koden kommer att fungera bra
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 använder whileslingan kommer inte att fungera — i kommer aldrig att vara större än 7. Men koden med slingan forkommer att fungera bra.



4. Jämföra för loopar: Java vs Pascal

Pascal har förresten också en Forslinga. I allmänhet har i princip alla programmeringsspråk ett. Men i Pascal är det supertydligt. Exempel:

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);
}