„Bună, Amigo!

— Bună, Ellie.

„Ai studiat deja buclele și asta e grozav”.

"Sunt de acord! Acum nu știu cum să trăiesc fără ei."

"Uneori te poți descurca fără ele... Dar mai des vei avea nevoie de ele. Astăzi vom vorbi despre situația în care trebuie să ieși dintr-o buclă înainte de termen."

„Vrei să spui, când condiția pentru continuarea buclei este adevărată, dar tot trebuie să ieși din buclă?”

„Exact! Uneori sună ca și cum ai fi deja un programator. Oricum, pentru a ieși dintr-o buclă înainte de program, poți folosi declarația break . Aruncă o privire la următorul exemplu:

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".

"Înțeleg. Programul citește linii din consolă. Dacă introduceți "exit", atunci isExitvariabila devine true, condiția buclei va fi , iar bucla se va termina."!isExitfalse

"Așa este. Deci, Java are o breakinstrucțiune specială care 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. Instrucțiunea este foarte scurtă. :

break;

„Iată cum puteți folosi breakdeclarația pentru a rescrie exemplul pe care tocmai 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".

"Poate că îmi voi aminti asta. Simt că îmi va veni la îndemână."

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

— Ce vrei să spui prin iterație?

„O iterație de buclă este o execuție a corpului buclei. continueInstrucțiunea întrerupe iterația curentă a buclei, dar, spre deosebire de breakinstrucțiune, nu încheie bucla în sine. Instrucțiunea este, de asemenea, scurtă:

continue;

„Deci, continueinstrucțiunea poate fi folosită într-o buclă dacă dorim să „sărim” execuția anumitor iterații ale buclei?”

„Exact. Înțelegi diferența dintre breakși continue? Dacă trebuie să găsești șapte din 20 de cifre care nu se repetă, ce fel de declarație de întrerupere a buclei și a buclei ai folosi?

"Hmm... aș parcurge toate numerele și dacă aș găsi 7, atunci aș executa un break."

„Ce se întâmplă dacă trebuie să afișați numere de la 1până la, 20cu excepția numerelor care sunt divizibile cu 7?”

"Ei bine, aici probabil că am nevoie de continue, deoarece nu vreau să ies din buclă. Dar încă nu prea înțeleg."

"Permiteți-mi să vă arăt cum să rezolvați această problemă. Acesta este cum 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(diviziunea restului cu 7este 0 ), atunci omitem afișarea numărului.

"De ce te uiți la mine atât de suspicios, Ellie? Există vreo captură aici?"

„Nu poți fi păcălit, Amigo! Într-adevăr, acest cod nu va funcționa corect . Va afișa primele 6 cifre, iar apoi iva rămâne pentru totdeauna blocat pe număr 7. La urma urmei, continuedeclarația omite alte două afirmații: System.out.println(i)și i++. Ca ca rezultat, odată ce ajungem la valoarea 7, variabila inu se va mai schimba și vom fi într-o buclă infinită. Am scris codul în acest fel intenționat pentru a ilustra o 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);
}

"Excelent! Voi încerca să nu fac această greșeală."

— Îmi voi aminti de promisiunea ta!