1. breakenunţ

Să aruncăm o privire la un exemplu din lecția anterioară:

Cod Explicaţie
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Programul va citi o linie de la tastatură, până când introduceți "exit".

Programul citește linii din consolă până când exiteste introdus cuvântul. Dacă introduceți acest cuvânt, atunci isExit variabila devine true, condiția buclei va fi , iar bucla se va termina."!isExitfalse

Java are o instrucțiune specială breakcare vă permite să simplificați o astfel de logică. Dacă o breakinstrucțiune este executată în interiorul unei bucle, atunci bucla se termină imediat. Programul va începe să execute instrucțiunea care urmează buclei. Afirmația este foarte scurtă:

break;

Iată cum puteți folosi breakdeclarația pentru a rescrie exemplul pe care tocmai l-am discutat:

Cod Explicaţie
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
Programul va citi o linie de la tastatură, până când introduceți "exit".


2. continua declarația

Dar breaknu este singura instrucțiune Java care vă permite să controlați comportamentul unei bucle. Java are și continuedeclarația. Dacă executați o continueinstrucțiune în interiorul unei bucle, iterația curentă a buclei se va încheia înainte de program.

Executarea corpului buclei o dată se numește o iterație a buclei. Instrucțiunea continueîntrerupe iterația curentă a buclei, dar, spre deosebire de breakinstrucțiune, nu încheie bucla în sine. Declarația este și ea scurtă:

continue;

Declarația continueeste foarte convenabilă într-o buclă dacă dorim să „sărim” execuția corpului buclei în anumite situații.

Sarcină: Vrem să scriem un program care imprimă numere de la 1la, 20dar care sărită numerele care sunt divizibile cu 7. Așa ar putea arăta acest cod.

Cod Explicaţie
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
Programul afișează numere de la 1până la 20. Dacă numărul este divizibil cu 7(restul împărțirii cu 7este 0), atunci omitem afișarea numărului.

De fapt, acest cod nu va funcționa , deoarece iva rămâne pentru totdeauna blocat la număr 7. La urma urmei, continuedeclarația omite alte două afirmații: System.out.println(i)și i++. Ca urmare, odată ce ajungem la valoarea 7, variabila inu se va mai schimba și vom fi într-o buclă infinită.

Am scris codul astfel intenționat pentru a ilustra această greșeală foarte frecventă. Cum o reparăm?

Există două opțiuni aici:

Opțiunea 1: modificați iînainte de a executa continue, dar dupăi % 7

Opțiunea 2: crește întotdeauna ila începutul buclei. Dar atunci ivaloarea de pornire trebuie să fie 0.

Opțiunea 1 Opțiunea 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}