In acest post vom vedea cum se implementeaza in Java, structurile de control fundamentale:
- structuri decizionale: if – then, if – then – else,switch
- structuri de ciclare for, do-while,while – do, for imbunatatit (enhanced – for)
- instructiuni de control: break, continue;
Prin intermediul structurilor de control putem scrie programe a caror executie nu inseamna doar o secventa liniara de instructiuni.
Alte topicuri care fac parte din acest tutorial Java 6 sunt accesibile prin Tutorial Java 6 – Continut.
Cum se implementeaza in Java if – then
Structura conditionala if – then are forma:
1: if (conditie)
2: < expresie 1 >
sau
1: if (conditie) {
2: < expresie 1 >
3: < expresie 2 >
4: }
in care (ATENTIE !)conditie reprezinta o expresie sau variabila booleana ce are ca valoare true sau false. De exemplu 30 > 10 sau 30 == 10.
In Java nu se accepta conditii bazate pe expresii sau variabile care au valori numerice. De exemplu, expresia urmatoare este valida in C/C++ insa NU si in Java:
int valoare = 10;
if(valoare)
System.out.println("Valoare nenula !");
genereaza eroare de compilare de tipul incompatible types.
Pentru a exemplifica sa determinam daca un numar este negativ, si daca este atunci sa il modificam:
int negativeNumber = -22;
boolean isNumber = true;
if(isNumber)
System.out.println("Este numar !");
if(negativeNumber < 0)
{
System.out.println("Este numar negativ ! Il vom face pozitiv;");
negativeNumber = (-1) *negativeNumber;
System.out.println(negativeNumber);
}
Cum se implementeaza in Java if – then – else
Structura conditionala if – then – else are forma:
1: if (conditie){
2: < expresie 1 >
3: < expresie 2 >
4: }
5: else{
6: < expresie 3 >
7: < expresie 4 >
8: }
Daca vrem sa determinam minimul dintre 2 numere:
int vb1 = 10;
int vb2 = 20;
int min;
if(vb1 < vb2)
min = vb1;
else
min = vb2;
Aceeasi solutie poate fi implementata si prin intermediul operatorului conditional ?::
conditie ? < expresie then > : < expresie else >
, iar exemplul de mai devreme devine:
min = vb1 < vb2 ? vb1 : vb2;
Cum se implementeaza in Java do – while
Structura repetitiva do – while implementeaza un ciclu post-conditionat, deoarece conditia care asigura iesirea/ramanerea in bucla se verifica la sfarsit. Structura va executa cel putin o data iteratia:
1: do
2: {
3: < expresie 1 >
4: < expresie 2 >
5: } while (conditie);
De exemplu, daca dorim sa calculam N! (cu conditia ca N > 1) printr-un do – while:
//n factorial prin do - while cu conditia ca n > 0
int nFactorial = 1;
int i = 0;
int n = 5;
do
{
i++;
nFactorial = nFactorial *i;
}while(i < n);
//afisam valoarea
System.out.println(n+"! = "+nFactorial);
Cum se implementeaza in Java while - do
Structura repetitiva while - do implementeaza un ciclu pre-conditionat, deoarece conditia care asigura iesirea/ramanerea in bucla se verifica la inceput inaine de a se executa iteratia:
1: while (conditie)
2: {
3: < expresie 1 >
4: < expresie 2 >
5: }
Acelasi exemplu, N!, dar prin while – do:
//n factorial prin while - do
int nFactorial = 1;
int i = 0;
int n = 5;
while (i < 5)
{
i++;
nFactorial = nFactorial *i;
}
//afisam valoarea
System.out.println(n+"! = "+nFactorial);
Cum se implementeaza in Java for
Structura repetitiva for implementeaza o structura repetitiva pre-conditionata, asemenea lui while-do. Structura for este mult mai eficienta doarece iteratia si initializarea sunt incluse in structura:
1: for(initializare; conditie; iteratie)
2: {
3: < expresie 1 >
4: < expresie 2 >
5: }
De exemplu pentru a determina suma elementelor unui vector:
int[] vector = {1,2,3,4,5};
int suma = 0;
for(int j = 0; j < vector.length; j++)
suma += vector[j];
System.out.println("Suma este "+suma);
In interiorul structurii for, pot fi trecute mai multe instructiuni de initializare sau de iteratie separate prin , (virgula):
1: for(initializare1, initializare2; conditie; iteratie1, iteratie2)
2: {
3: < expresie 1 >
4: < expresie 2 >
5: }
Elementele instructiunii for sunt optionale. Urmatoarele exemple sunt corecte, insa in unele dintre ele trebuie sa decizi cand se termina bucla infinita prin break.
for( initializare; ; )
for( ; conditie; iteratie)
for( ; ; iteratie)
for( ; ; ) // bucla infinita
Pentru examenul SCJP, trebuie avut in vedere faptul ca variabilele declarate in zona de initializare reprezinta variabile locale blocului for si nu sunt vizibile in afara lui.:
for ( int i=0; i<10 ; i++ ) {
// prelucrari
}
// eroare compilare: cannot resolve symbol: i
System.out.println("valoarea lui i este " + i );
Cum se implementeaza in Java enhanced - for
Structura repetitiva enhanced - for implementeaza o structura repetitiva pre-conditionata. Aceasta structura a fost introdusa incepand cu Java 5.0 pentru a permite o sintaxa mai usoara (este echivalent cu foreach din .NET). Aceasta structura poate fi utilizata doar pentru a itera prin colectii care implementeaza interfata java.lang.Iterable
1: for ( variabila : colectie_iterabila )
2: {
3: < expresie 1 >
4: < expresie 2 >
5: }
6:
Suma elementelor unui vector cu enhanced – for arata asa:
suma = 0;
for(int valoare : vector)
{
suma += valoare;
}
System.out.println("Suma este "+suma);
Cum se implementeaza in Java switch
Structura conditionala switch implementeaza o structura conditionala cu mai multe ramuri de executie. Inlocuieste intr-un mod mai eficient o structura if-then-else cu multe ramuri else sau then.
1: switch (variabila) {
2: case valoare_constanta1:
3: < expresie 1 >
4: break;
5: case valoare_constanta2:
6: < expresie 2 >
7: break;
8: …
9: default:
10: < expresie >
11: }
Este important ca fiecare expresie de tip case sa fie terminata cu instructiunea break deoarece aceasta asigura iesirea din structura.
De exemplu testarea valorii unei variabile se poate face mai usor prin switch decat prin mai multe structuri if imbricate.
int valoareTest = 2;
switch(valoareTest)
{
case 1:
System.out.println("Valoarea este egala cu 1");
break;
case 2:
System.out.println("Valoarea este egala cu 2");
break;
case 3:
System.out.println("Valoarea este egala cu 3");
break;
case 4:
System.out.println("Valoarea este egala cu 4");
break;
default:
System.out.println("Valoarea este in afara intervalului");
}
Prin executia exemplului anterior se obtine mesajul: Valoarea este egala cu 2.
Daca nu se foloseau instructiuni de tip break atunci exemplul anterior ar fi afisat:
Valoarea este egala cu 2
Valoarea este egala cu 3
Valoarea este egala cu 4
Valoarea este in afara intervalului
Cum se implementeaza in Java instructiunile break si continue
Instructiunea break permite intreruperea unei bucle for, do-while, while-do sau iesirea dintr-o serie de case-uri.
Instructiunea continue permite trecerea la urmatoare iteratie a unui ciclu for, do-while, while-do ignorand restul instructiunilor din iteratia curenta.
De exemplu, fiind dat un vector sa se determine suma elementelor pozitive:
int[] valoriInt = {10,12,5,-4,3,-1,23};
int sumaPozitive = 0;
for(int j = 0; j < valoriInt.length; j++)
{
if(valoriInt[j] < 0) //daca este negativ
continue; //trecem la urmatoarea iteratie
//in mod normal, adunam valoarea
sumaPozitive+=valoriInt[j];
}
System.out.println("Suma elementelor pozitive este "+sumaPozitive);
sau sa se determine prima valoare negativa:
int[] valoriInt = {10,12,5,-4,3,-1,23};
int valoareNegativa = 0;
for(int j = 0; j < valoriInt.length; j++)
{
if(valoriInt[j] < 0)
{
//daca este negativ
//salvez valoarea
valoareNegativa = valoriInt[j];
//iesim din bucla
break;
}
}
System.out.println("Prima valoare negativa este "+valoareNegativa);
Alte topicuri care fac parte din acest tutorial Java 6 sunt accesibile prin Tutorial Java 6 – Continut.