1. Sløjfer i vores liv

Meget ofte kræver vores liv, at vi udfører de samme handlinger mange gange. Antag for eksempel, at jeg skal scanne et dokument, der består af mange sider. At vi gentager den samme procedure igen og igen:

  • Læg den første side på scanneren
  • Tryk på scanningsknappen
  • Læg den næste side på scanneren

Dette er svært at gøre manuelt. Det ville være rart, hvis denne proces på en eller anden måde kunne automatiseres.

Eller overvej et andet eksempel: lad os sige, at jeg vil markere alle ulæste e-mails i min indbakke som spam. Engang skulle jeg vælge hver e-mail en ad gangen og markere den som spam.

Men programmører er dovne, så de automatiserede denne proces for længe siden: nu vælger du blot en hvilken som helst liste med bogstaver og klikker på "markér som spam", og så kører din e-mail-klient gennem listen og flytter hver e-mail til spam-mappen.

Hvad kan vi sige her? Det er super praktisk, når en computer eller et program kan udføre hundredvis eller tusindvis af monotone operationer med et enkelt klik. Og nu vil du også lære, hvordan du gør dette.


2. whilesløjfe

If-else-sætningen udvidede vores programmeringsmuligheder markant, hvilket gjorde det muligt at skrive programmer, der udfører forskellige handlinger i forskellige situationer. Men der er endnu en ting, der vil gøre vores programmer til en størrelsesorden mere kraftfulde - loops .

Java har 4 slags loops: while, for, for-eachog do-while. Vi vil nu grave i den allerførste af disse.

En whileløkke er meget enkel. Den består kun af to dele: en tilstand og en løkkekrop . Løkkelegemet udføres igen og igen, så længe betingelsen er true. Generelt whileser en løkke sådan ud:

while (condition)
   statement;
Notation for en whileløkke med et enkelt udsagn
while (condition)
{
   block of statements
}
Notation for en whileløkke med en blok af udsagn

Det er meget enkelt. Sætningen eller blokken af ​​sætninger udføres igen og igen , så længe loop-betingelsen er lig .true

Sådan fungerer det: Først kontrolleres tilstanden . Hvis det er sandt, udføres loop-legemet ( sætningen eller blokken af ​​sætninger ). Derefter kontrolleres tilstanden igen, og løkkelegemet udføres igen. Og så videre, indtil tilstanden bliver falsk.

Hvis betingelsen altid er sand , stopper programmet aldrig med at køre. Det vil blive permanent fast i løkken.

Hvis betingelsen er falsk den allerførste gang, den kontrolleres , vil løkkens krop ikke blive udført en gang.


3. Eksempler på sløjfer

Her er nogle praktiske eksempler på sløjfer i aktion.

Kode Forklaring
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
5 linjer vil blive vist på skærmen:
5
4
3
2
1
Kode Forklaring
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
10 linjer vil blive vist på skærmen:
0
1
...
8
9
Kode Forklaring
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
Programmet læser tal fra tastaturet, så længe der indtastes tal.
Kode Forklaring
while (true)
   System.out.println("C");
Programmet vil uendeligt udskrive bogstavet Cpå skærmen.
Kode Forklaring
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Programmet vil læse linjer fra tastaturet

indtil exiter indtastet.

I det foregående eksempel equals()bruges metoden til at sammenligne strenge. Hvis strengene er ens, vil funktionen returnere true. Hvis strengene ikke er ens, så vender den tilbage false.



4. Løkke i en løkke

Efterhånden som du lærte om betingede udsagn, så du, at du kan bruge dem til at implementere kompleks logik ved at kombinere flere betingede udsagn. Med andre ord, ved at bruge et ifudsagn inde i et ifudsagn.

Du kan gøre det samme med løkker. For at skrive en løkke i en løkke, skal du skrive den anden løkke inde i kroppen af ​​den første løkke. Det kommer til at se sådan ud:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
whileloop (med en blok af udsagn ) inde i en anden whileloop

Lad os se på tre opgaver.

Opgave 1 . Lad os sige, at vi vil skrive et program, der viser ordet Mompå skærmen 4 gange. En løkke er præcis, hvad vi har brug for. Og vores kode vil se sådan ud:

Kode Forklaring
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
4 linjer vil blive vist på skærmen:
Mom
Mom
Mom
Mom

Opgave 2 . Vi vil skrive et program, der viser 5 bogstaver As på en enkelt linje. For at gøre dette har vi brug for en løkke igen. Sådan kommer koden til at se ud:

Kode Forklaring
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
I stedet for println()vil vi bruge print(). Ellers ville hvert bogstav A ende på en separat linje.

Skærmoutput vil være:
AAAAA

Opgave 3 . Vi ønsker at vise et rektangel bestående af bogstavet As. Rektangelet skal bestå af 4 rækker gange 5 kolonner. For at opnå dette har vi nu brug for en indlejret løkke. Vi tager blot vores første eksempel (det, hvor vi udsender 4 linjer) og erstatter koden til at udskrive en linje med koden fra det andet eksempel.

Kode Forklaring
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Den ydre løkke er lilla. Den bruger nvariablen til at tælle antallet af iterationer af løkken.

Den indre løkke er grøn. Den bruger mvariablen til at tælle antallet af loop-iterationer.

Vi skal eksplicit flytte markøren til næste linje, efter at den indre løkke er færdig. Ellers ender alle de bogstaver, som programmet udskriver, på én linje.

Skærmoutput vil være:
AAAAA
AAAAA
AAAAA
AAAAA

De ydre og indre sløjfer skal bruge forskellige variable til at tælle antallet af sløjfe-iterationer. Vi var også nødt til at tilføje System.out.println()kommandoen efter den indre løkke, da den løkke viser bogstavet As på samme linje. Når bogstaverne på en linje vises, skal nogen flytte markøren til en ny linje.



5. Sammenligning af loops Java vs Pascal

Mange af jer studerede Pascal i gymnasiet. For at gøre det nemmere for dig at forstå materialet her, tag et kig på denne sammenligning af whileloops skrevet i Pascal og Java. Hvis du ikke kender Pascal, så spring bare denne del over.

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