Sunteți pe pagina 1din 13

Programare Java

Curs 3

TABLOURI

Tablourile reprezinta o modalitate de a pastra o lista de elemente cu aceleasi tipuri de


date primitive sau de clase. Fiecare element al listei este pastrat intr-o locatie proprie,
numerotata astfel incat informatia poate fi usor accesata.
Tablourile pot contine orice tip de informatie pastrata in mod normal intr-o variabila,
insa, o data creat, tabloul nu poate fi folosit decat pentru acel tip de date. De exemplu,
putem avea un tablou de intregi, un tablou de obiecte String sau un tablou de tablouri
insa nu putem avea un tablou care sa contina atat siruri cat si intregi.
Pentru a crea un tablou in Java trebuie sa urmarim pasii de mai jos:
1. Declaram o variabila care sa refere un tablou
2. Cream un obiect de tip tablou si il atribuim variabilei tablou
3. Stocam informatia in tabloul respectiv

DECLARAREA VARIABILELOR TABLOU


Primul pas de mai sus este declararea variabilei care va referi tabloul. Variabilele
tablou indica tipul de obiecte sau de date pe care le va contine tabloul, precum si
numele acestuia. Pentru a le diferentia de declaratiile normale de variabile se adauga o
pereche de paranteze patrate [] la tipul de obiecte sau de date sau la numele variabilei.
Exemplu:
String cuvinte[];
Point lovituri;
int salariu[];
Exemplele de mai jos sunt si ele valide:
String[] cuvinte;
Point[] lovituri;
int[] salariu;

CREAREA DE OBIECTE TABLOU

Dupa ce declaram variabila tablou, urmatorul pas este de a crea un obiect tablou si de
a-l atribui unei variabile. Exista mai multe modalitati:
-

folosim operatorul new

initializam direct continutul tabloului

Deoarece tablourile sunt obiecte Java putem folosi operatorul new pentru a crea o
noua instanta a unui tablou:
String[] numeJucatori=new String[10];
Aceasta instructiune creaza un tablou de siruri cu 10 pozitii, care poate contine
obiecte String. Atunci cand cream un obiect tablou folosind operatorul new, trebuie sa
indicam cate pozitii urmeaza sa contina acesta. Aceasta instructiune nu introduce nici
un fel de obiecte String pe aceste pozitii.
Obiectele tablou pot contine si tipuri primitive cum ar fi intregi sau valori booleene,
nu numai obiecte:
int[] temp=new int[99];
Atunci cand cream un obiect tablou folosind operatorul new toate pozitiile sale vor fi
initializate automat (cu 0 cele numerice, cu false pentru boolean, cu /0 pentru tipul
caracter si cu null pentru obiecte).
OBS: null nu este echivalent cu zero sau cu caracterul /0, ca in cazul limbajului C

Putem crea si initializa un tablou in acelasi timp. In loc sa folosim operatorul new
pentru a crea noul obiect tablou includem elementele tabloului intre {}, separate prin
virgula:
String[] nume={Ion, Andrei, Mihai };
Fiecare dintre elementele dintre acolade trebuie sa fie de acelasi tip cu variabila
tablou. Atunci cand cream un tablou cu valori initiale in acest fel, tabloul are
dimensiunea egala cu numarul de elemente incluse. Exemplul anterior creaza un
tablou de obiecte String, denumit nume, care contine trei elemente.

ACCESAREA ELEMENTELOR TABLOULUI

Dupa ce s-a creat un tablou cu valori initiale putem accesa, modifica si testa valorile
fiecarei locatii a acestuia. Valoarea unei locatii este accesata cu numele tabloului,
urmat de pozitia ei in cadrul acestuia, incadrata intre []. Numele si pozitia pot fi
folosite intr-o expresie, cum ar fi:
scorParticipant[40]=500;
scorParticipant reprezinta o variabila care refera un obiect tablou. Pozitia (indexul)
specifica locatia care va fi accesata in cadrul tabloului Numerotarea pozitiilor incepe
de la 0 astfel incat un tablou cu 10 elemente poate fi accesat folosind pozitiile 0 9.

Toate pozitiile unui tablou sunt verificate daca se incadreaza in limitele tabloului asa
cum s-au specificat la crearea tabloului. In Java este imposibil sa accesam sau sa
atribuim o valoare unei pozitii a tabloului aflata in afara limitelor sale, problema care
putea apare in C de exemplu.
String[] vorbitor=new String[10];
vorbitor[10] =Text introdus;
Un program care foloseste aceste doua linii de cod va da eroare de compilare la
folosirea variabilei vorbitor[10]. Eroarea apare din cauza ca tabloul nostru nu poseda
pozitia a zecea.
Pentru a evita in programe depasirea accidentala a sfarsitului tabloului putem folosi o
variabila de instanta length disponibila pentru toate obiectele tablou, indiferent de
tip:
int lungime=lungime.length;

MODIFICAREA ELEMENTELOR TABLOURILOR

Dupa cum am vazut mai sus putem atribui o valoare unei anumite pozitii a tabloului
prin introducerea operatorului de atribuire dupa numele tabloului si al indexului:
noteleMele[4]=10;
propozitia[0]=Aici;
propozitia[10]=propozitia[0];
Un lucru important de retinut este ca un tablou de obiecte, in Java, este un tablou de
referinte la obiectele respective. Atunci cand atribuim o valoare unei pozitii dintr-un
astfel de tablou nu se va copia valoarea dintr-o pozitie in alta ci se va atribui referinta.
In schimb, tablourile de tipuri de date primitive copiaza valorile dintr-o locatie in alta.
Tablourile sunt relativ simplu de creat si modificat insa ofera foarte multe avantaje si
sunt foarte utile in Java.

1: class TestTablou {
2:
3: String[] prenume={Dennis,Grace,Bjarne,James};
4: String[] numeDeFamilie=new String[prenume.length];
5:
6: void afiseazaNume() {
7: int i=0;
8: System.out.println(prenume[i]
9: + +numeDeFamilie[i]);
10 i++;
11. System.out.println(prenume[i]
12: + +numeDeFamilie[i]);
13 i++;

14. System.out.println(prenume[i]
15: + +numeDeFamilie[i]);
16 i++;
17. System.out.println(prenume[i]
18: + +numeDeFamilie[i]);
19 }
20:
21: public static void main (String argumente[]) {
22: TestTablou a=new TestTablou();
23: a.afiseazNume();
24: System.out.println(____);
25: a.numeDeFamilie[0]=Ritchie;
26: a.numeDeFamilie[1]=Hopper;
27: a.numeDeFamilie[2]=Stroustrup;
28: a.numeDeFamilie[3]=Gosling;
29: a.afiseazaNume();
30: }
31: }
In acest program cream o clasa TestTablou, cu doua variabile de instanta care
pastreaza tablouri de obiecte String. Primul, prenume, este declarat si initializat in
linia 3 pentru a contine patru siruri. A doua variabila, numeDeFamilie, este declarata
si creata in linia 4, insa nu contine nici o valoare initiala. Tabloul acesta are acelasi
numar de pozitii ca si tabloul prenume, deoarece foloseste valoarea prenume.length.
Atunci cand este folosita pentru un obiect tablou, variabila de instanta length intoarce
numarul de pozitii din tablou.
Clasa TestTablou mai contine si doua metode: afiseazaNume si main. Metoda
afiseazaNume(), definita in liniile 6 19, parcurge succesiv tablourile prenume si
numeDeFamilie, afisand continutul fiecarei pozitii.
Metoda main creaza o instanta initiala a clasei TestTablou (in linia 22) asa incat sa I
se poata folosi variabilele si metodele de instanta.
Linia 23 apeleaza metoda afiseazaNume(), pentru a prezenta cum arata initial
obiectul. Rezultatul este dat in primele patru linii afisate.
Liniile 25 28 seteaza valorile fiecarei pozitii din tabloul numeDeFamilie.
Linia 29 apeleaza inca o data metoda afiseazaNume() pentru a arata noile valori din
tabloul numeDeFamilie.

TABLOURI MULTIDIMENSIONALE

Dimensiunile multiple ale unui tablou sunt folositoare atunci cand reprezentam de
exemplu un tabel x,y de elemente ale unui caroiaj.
Java nu suporta tablourile multidimensionale, insa obtine acelasi efect prin declararea
unui tablou de tablouri. Acele Tablouri pot contine si ele tablouri si asa mai departe,
pana cand este obtinut numarul de dimensiuni dorit.

Mai jos avem un exemplu de declarare si accesare a unor astfel de tablouri:


int[][] coordonate=new int[12][12];
coordonate[0][0]=1;
coordonate[0][1]=2;

INSTRUCTIUNI BLOC

Instructiunile din Java sunt grupate in blocuri. Inceputul si sfarsitul unui bloc sunt
notate cu acolade {}.
Blocurile sunt denumite si instructiuni bloc, deoarece un bloc poate fi folosit oriunde
poate fi folosita o instructiune simpla. Fiecare instructiune din cadrul blocului se
executa secvential.
Blocurile pot fi plasate si in cadrul altor blocuri, asa cum se procedeaza la
introducerea unei metode in cadrul unei definitii de clasa.
Un lucru de retinut referitor la blocuri este acela ca ele creaza un domeniu de
vizibilitate pentru variabilele locale create in cadrul blocului.
Domeniu de vizibilitate este un termen folosit in programare pentru a denumi acea
parte a programului in care o variabila exista si poate fi folosita. Daca programul
paraseste domeniul de vizibilitate al unei variabile, aceasta nu mai exista si incercarea
de a o accesa va da nastere unei erori.
Domeniul de vizibilitate al unei variabile este blocul in care a fost creata. Atunci cand
cream si folosim variabile locale in cadrul unui bloc, aceste variabile isi inceteaza
existenta dupa ce blocul isi termina executia.
void testBloc() {
int x=10;
{ // incepere bloc
int y=40;
y=y+x;
} // sfarsit bloc
}
In exemplul anterior exista doua variabile definite in cadrul acestei metode: x si y.
Domeniul de vizibilitate al variabiley y este blocul in care se afla; ea poate fi folosita
doar in cadrul acestui bloc. Daca am incerca sa o folosim oriunde in alta parte a
metodei testBloc() vom obtine o eroare. Variabila x a fost creata in interiorul metodei,
insa in afara blocului interior, deci poate fi folosita in orice alta parte a metodei.
Putem modifica valoarea lui x oriunde in cadrul metodei.

INSTRUCTIUNEA CONDITIONALA IF

Unul dintre aspectele cheie ale programarii este posibilitatea unui program de a decide
ce va face. Acest lucru este tratat printr-un tip special de instructiuni denumite
instructiuni conditionale.
O instructiune conditionala reprezinta o instructiune executata doar in cazul
indeplinirii unei anumite conditii.
Cea mai des folosita instructiune conditionala este IF (daca). Aceasta foloseste o
expresie booleana pentru a decide daca o instructiune va fi sau nu executata. Daca
expresia intoarce valoarea true instructiunea se va executa.
if (varsta>50)
System.out.println(Nu mai esti chiar tanar);
Daca dorim ca atunci cand expresia IF intoarce valoarea false sa se execute totusi
ceva folosim cuvantul cheie optional else.
if (alegere==true)
restaurant=President;
else
restaurant=Lido;
Expresia IF executa instructiuni diferite in functie de rezultatul unei singure testari
booleene.

OBS: Testul instructiunii IF in Java trebuie sa returneze o variabila booleana (true


sau false); in C testul poate returna un intreg.
In practica se foloseste si o versiune prescurtata a testului conditional IF; in locul
expresiei:
if (alegere==true)
Putem folosi doar:
if (alegere)
In continuare vom vedea un exemplu complet de aplicatie Java care se bazeaza pe
folosirea testului IF:
1: class TestParitate {
2:
3: void verificareParitate(int val) {
4: System.out.println(Valoarea este
5: +val+. );
6: if (val%2==0)
7: System.out.println(Par);
8: }
9:

10: public static void main (String argumente[]) {


11. TestParitate e=new TestParitate();
12:
13: e.verificareParitate(1);
14: e.verificareParitate(2);
15: e.verificareParitate(54);
16: e.verificareParitate(77);
17: e.verificareParitate(1346);
18: }
19: }
Nucleul clasei TestParitate este metoda verificareParitate() liniile 3-8 in care
valorile sunt testate si se tipareste mesajul corespunzator. Metoda incepe prin tiparirea
valorii care i-a fost transmisa. Argumentul este apoi testat folosind o instructiune
conditionala IF, pentru a verifica daca un numar este par.
Metoda main() a aplicatiei creaza o noua instanta a clasei TestParitate si o testeaza
apeland metoda verificareParitate() de mai multe ori, cu diferite valori.

OPERATORUL CONDITIONAL

O alternativa viabila in practica este folosirea intr-o instructiune conditionala, in locul


cuvintelor cheie IF si ELSE a operatorului conditional (numit si operator ternar
deoarece are trei termeni).
Operatorul conditional este o expresie, ceea ce inseamna ca intoarce o valoare, spre
deosebire de mai generalul IF care are ca rezultat doar executarea unei instructiuni.
Operatorul conditional este mai util pentru instructiuni conditionale scurte sau simple,
ca in exemplul urmator:
test?rezultat_adevarat:rezultat_fals;
test este o expresie care intoarce true sau false, la fel ca testul din instructiunea IF.
Daca testul este adevarat (true) operatorul conditional intoarce valoarea
rezultat_adevarat iar daca este fals returneaza rezultat_fals.
Mai jos putem vedea un exemplu practic:
int celMaiBunScor=scorulMeu>scorulTau?scorulMeu:scorulTau;
Folosirea operatorului conditional este echivalentul urmatorului cod IF:
int celMaiBunScor;
if (scorulMeu>scorulTau) celMaiBunScor=scorulMeu;
else celMaiBunScor=scorulTau;
Operatorul conditional are o precedenta foarte scazuta este de obicei evaluat dupa
toate subexpresiile sale. Singurii operatori care au precedenta mai mica sunt cei de
atribuire.

INSTRUCTIUNEA SWITCH

O operatie des intalnita in orice limbaj este compararea unei variabile cu o anumita
valoare, apoi compararea cu o alta in caz ca nu se potriveste cu prima si asa mai
departe. Acest proces poate deveni destul de dificil daca s-ar folosi doar instructiuni
IF, in functie de diversitatea valorilor pe care trebuie sa le comparam. De exemplu
putem ajunge la un set de instructiuni de genul:
if (oper==+) adunaArg(arg1,arg2);
else if (oper==-) scadeArg(arg1,arg2);
else if (oper==*) inmultireArg(arg1,arg2);
else if (oper==/) imparteArg(arg1,arg2);
Folosirea IF-ului in acest caz este o imbricare deoarece fiecare instructiune else
contine o alta if pana se fac toate testele posibile.
Un mecanism prescurtat pentru aceste instruciuni IF imbricate, care poate fi folosit in
unele limbaje de programare, este gruparea testelor si actiunilor intr-o singura
instructiune. In Java putem grupa actiunile ca si in C folosind instructiunea
SWITCH.
switch(nota) {
case 10: System.out.println(Foarte bine); break;
case 8: System.out.println(Bine);break;
case 5: System.out.println(Ai trecut);break;
default: System.out.println(4 - ai cazut);
}
Instructiunea SWITCH este bazata pe un test; in exemplul nostru se testeaza variabila
nota. Variabila testata, care poate fi de orice tip primitiv (byte, short, char sau int) este
comparata pe rand cu fiecare dintre valorile case. Daca se gaseste o potrivire se
executa instructiunea specificata dupa test; daca nu se gaseste nici o potrivire se
executa instructiunea default. Aceasta instructiune este de fapt optionala; daca este
omisa si nu se gaseste nici o potrivire case atunci instructiunea SWITCH se incheie
fara a se executa nimic.
Implementarea Java a instructiunii SWITCH este oarecum limitata testele si valorile
pot fi doar tipuri primitive simple ce pot fi convertite in int. Intr-o asemenea
instructiune nu se pot folosi tipuri primitive de dimensiuni mai mari large sau float
siruri sau alte obiecte si nici nu se pot testa alte relatii in afara de cea de egalitate.
Aceste restrictii limiteaza folosirea SWITCH la cazuri relativ simple. In schimb
instructiunile IF imbricate pot fi folosite pentru orice tip de testare.
Pentru o utilizare mai complexa a instructiunii SWITCH se poate apela la utilizarea
unui tip enumerat iar incepand cu JAVA SE 7, se poate apela si la un obiect de tip
STRING.
Trebuie sa mentionez ca dupa o instructiune case putem include oricate instructiuni
fara a fi necesare acoladele (ca in cazul lui IF).

Instructiunea break forteaza iesirea din instructiunea SWITCH la gasirea unei potriviri
de valoare. Exista posibilitatea nefolosirii acestei instructiuni caz in care programul
executa mai departe instructiunile pana intalneste un break sau pana la sfarsitul
instructiunii switch. Instructiunea break intrerupe executia in punctul curent si face un
salt la codul aflat dincolo de urmatoarea acolada inchisa }.
Avantajul nefolosirii lui break apare atunci cand se doreste executarea acelorasi
instructiuni pentru mai multe valori. Pentru aceasta se folosesc mai multe linii case
fara instructiuni; astfel, switch va executa primele instructiuni pe care le va intalni. De
exemplu, in urmatoarea instructiune switch sirul x este un numar par este afisat doar
daca x are una dintre valorile 2, 4, 6 sau 8. Toate celelalte valori ale lui x duc la
afisarea textului default:
switch(x) {
case 2:
case 4:
case 6:
case 8:
system.out.println(x este un numar par);
break;
default: System.out.println(x nu este par);
}
In cele ce urmeaza vom detalia inca un exemplu care foloseste instructiunea
SWITCH. Aceasta clasa converteste valorile intregi in cuvintele ce le denumesc.
class CititorNumere{
String conversieNumar(int val) {
switch (val) {
case 0: return zero;
case 1: return unu;
case 2: return doi;
case 3: return trei;
case 4: return patru;
case 5: return cinci;
case 6: return sase;
case 7: return sapte;
case 8: return opt;
case 9: return noua;
default: return ;
}
}
public static void main(String argumente[]) {
CititorNumere n=new CititorNumere();
String num=n.conversieNumar(4)+n.conversieNumar(1)+n.conversieNumar(3);
System.out.printl(413 este convertit in: +num);
}
}

Instructiunea switch preia un argument intreg care este transmis metodei


conversieNumar() care, daca gaseste o potrivire, intoarce valoarea corespunzatoare
sub forma de sir.
Nu este nevoie de instructiuni break in CititorNumere deoarece se foloseste in schimb
instructiunea return. Aceasta este asemanatoare cu break, deosebirea fiind ca return
iese definitiv din metoda si returneaza o valoare.

CICLURI FOR

Ciclurile for repeta o instructiune de un numar specificat de ori, pana in momentul


cand se intalneste o conditie. Chiar daca sunt folosite de obicei pentru simple iteratii,
in care o instructiune este repetata de un numar de ori, ciclurile for pot fi folosite
pentru orice tip de operatii repetitive.
Ciclul for arata in Java ca mai jos:
for (initializare; test; incrementare) {
instructiune; }
Inceputul ciclului for contine trei parti:
-

initializare este o expresie care initializeaza pornirea ciclului. Daca folosim o


variabila index a ciclului aceasta expresie o poate declara si initializa in acelasi
timp. Variabilele declarate in for sunt locale ciclului in sine. In acesta sectiune
se pot initializa mai multe variabile, separand fiecare expresie printr-o virgula.
test este testul care se face dupa fiecare parcurgere a ciclului. Testul trebuie sa
fie o expresie booleana sau o functie care returneaza o valoare booleana, cum
ar fi i<10. Daca testul este true ciclul isi continua executia. O data intoarsa
valoarea false ciclul isi intrerupe executia.
incrementarea este o expresie sau un apel de functie. De obicei incrementarea
este folosita pentru a modifica valoarea indexului ciclului, pentru a aduce
starea ciclului mai aproape de final. Asemanator sectiunii initializare, putem
specifica aici mai multe expresii, separate prin virgule.

In exemplul de mai jos putem vedea o instructiune for care atribuie tuturor pozitiilor
unui tablou String valoarea Dl.:
String[] formulSalut=new String[10];
int i;
for (i=0;i<formulaSalut.length;i++)
formulaSalut[i]=Dl. ;
Elementul final al instructiunii for este expresia i++; aceasta face ca indexul ciclului
sa fie incrementat cu 1 la fiecare parcurgere a ciclului. Fara aceasta instructiune ciclul
nu s-ar incheia niciodata.
Trebuie mentionat un aspect destul de frecvent intalnit si generator de erori: nu se
pune; dupa paranteza) ciclului for:

for (i=0;i<10;i++);
x=x*i;
In exemplul de mai sus ciclul for se incheie dupa primul semn;, fara a se executa
instructiunea x=x*i ca parte a ciclului. Aceasta eroare poate fi greu de depistat pentru
ca nu apare ca o eroare la compilare ea este o eroare logica a programatorului.

CICLURI WHILE si DO

Ca si ciclurile for, ciclurile while si do permit executarea unui bloc de cod Java pana
in momentul cand se indeplineste o anumita conditie. Folosirea ciclurilor for, while
sau do este de multe ori o problema doar de stil. Ciclurile while si do sunt identice cu
cele din C, cu exceptia faptului ca testul trebuie sa foloseasca o conditie booleana.

CICLURI WHILE

Ciclul while este folosit pentru a repeta o instructiune atata timp cat o anumita
conditie este adevarata (true).
while (i<10) { x=x*i++;}
In exemplul anterior conditia care insoteste cuvantul cheie while este o expresie
booleana, i<10. Daca expresia returneaza true ciclul executa corpul sau si apoi
testeaza din nou conditia. Acest proces se repeta pana cand conditia ia valoarea false.

class CopieTablouWhile {
public static void main (String argumente[]) {
int[] tablou1={7,4,8,1,4,1,4};
float[] tablou2=new float[tablou1.length];
System.out.print(tablou1: [);
for (int i=0; i<tablou1.length; i++) {
System.out.print(tablou1[i]+ );
}
System.out.println(]);
System.out.print(tablou2: [ );
int index=o;
while (index<tablou1.length && tablou1[index]!=1) {
tablou2[index]=(float) tablou1[index];
System.out.print(tablou2[index++]+ );
}
System.out.println(]);
}
}

Programul declara doua tablouri tablou1 este un tablou de intregi, initializat cu


cateva numere. tablou2 este un tablou de numere in virgula mobila, care are aceleasi
dimensiuni cu tablou1, insa nu are valori initiale.
Programul parcurge apoi iterativ tablou1 afisand valorile din toate pozitiile acestuia;
in continuare programul verifica valorile din tablou1 si in cazul in care sunt diferite de
1 le transforma in numere reale si le inscrie in tablou2.
CICLURI DO WHILE
Acest ciclu este foarte asemanator cu while diferenta majora este locul unde se face
testarea conditiei in ciclu. Un ciclu while testeaza conditia inainte de ciclu si astfel
daca avem valoarea false corpul ciclului nu va fi deloc executat. Un ciclu do executa
corpul sau cel putin o data inainte de a testa conditia, deci daca aceasta are valoarea
false la prima testare corpul ciclului se va fi executat deja o data.
do {
x=x*i++;
}
while (i<10);
Corpul ciclului este executat o data inainte de evaluarea conditiei, i<10.

IESIREA FORTATA DIN CICLURI

In toate tipurile de cicluri acestea isi termina executia atunci cand se indeplineste
conditia testata. Pot fi cazuri in care apare ceva in executia ciclului si dorim sa iesim
mai repede din el. Pentru aceasta pot fi folosite cuvintele cheie break si continue.
Am intalnit deja break in paginile anterioare break oprea executia instructiunii
switch iar programul continua cu codul urmator instructiunii switch. Cuvantul cheie
break, folosit intr-un ciclu, face acelasi lucru inceteaza imediat executia ciclului
curent. Daca exista cicluri imbricate in cadrul altor cicluri executia continua cu
urmatoarea iteratie a ciclului din exterior. Astfel, programul continua executia
urmatoarei instructiuni aflata dupa ciclu.
Sa revenim la exemplul ciclului while care copia elementele unui tablou de intregi
intr-un tablou de numere in virgula mobila pana cand se intalnea valoarea 1. Putem
testa aceasta conditie in cadrul corpului ciclului while, dupa care folosim instructiunea
break pentru a parasi ciclul:
int index=0;
while (index<tablou1.length) {
if (tablou1[index]==1) break;
tablou2[index]=(float) tablou1[index++];
}

Cuvantul cheie continue incepe ciclul de la o noua iteratie. Pentru ciclurile do si while
aceasta inseamna ca se incepe din nou cu executia corpului ciclului; pentru ciclurile
for se evalueaza expresia de incrementare si apoi se executa blocul de instructiuni.
Instructiunea continue este folositoare atunci cand dorim sa tratati intr-un anume fel
elementele intr-un ciclu. Folosind exemplul anterior, de copiere a unui tablou in altul,
putem testa daca valoarea elementului curent este egala cu 1 si sa folosim continue
pentru a reincepe ciclul dupa fiecare 1 intalnit, asa incat tabloul rezultat sa nu contina
niciodata 1. Trebuie sa fim atenti ca, deoarece sarim peste unele elemente din primul
tablou acum trebuie sa pastram doua valori index pentru cele doua tablouri:
int index=0;
int index2=0;
while (index++ <=tablou1.length) {
if (tablou1[index]==1)
continue;
tablou2[index2++]=(float)tablou1[index];
}

CICLURI ETICHETATE
Instructiunile break si continue pot avea etichete optionale care sa indice locul de
unde se va continua executia programului. Fara eticheta, break sare in afara celui mai
apropiat ciclu sau la urmatoarea instructiune aflata dupa ciclul. Instructiunea continue
sare la urmatoarea iteratie a ciclului care o contine. Cu ajutorul etichetelor putem
folosi break pentru a sari intr-un punct aflat in afara unui ciclu imbricat sau continue
pentru a sari intr-un ciclu aflat in afara ciclului curent.
Pentru a folosi un ciclu cu etichete se introduce eticheta inainte de partea de inceput a
ciclului, urmata de semnul:. Apoi, dupa numele instructiunii break sau continue
introducem numele etichetei, ca mai jos:
afara:
for (int i=0; i<10; i++) {
while (x<50) {
if (i*x++>400) break afara;
// ciclu interior
}
// ciclu exterior
}
In acest exemplu de cod, eticheta afara marcheaza ciclul exterior. In cadrul ciclurilor
for si while, atunci cand este indeplinita o anumita conditie, instructiunea break cu
eticheta are ca rezultat terminarea ambelor bucle. Fara folosirea etichetei afara,
instructiunea break ar fi terminat executia ciclului interior si ar fi continuat executia
cu cel exterior.

S-ar putea să vă placă și