Cuvinte importante: - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

Cuvinte importante:

Description:

Title: PowerPoint Presentation Author: IBM Last modified by: mariana Created Date: 10/7/2006 6:25:39 PM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:208
Avg rating:3.0/5.0
Slides: 50
Provided by: IBM7234
Category:

less

Transcript and Presenter's Notes

Title: Cuvinte importante:


1
Cuvinte importante - expresii si operatori
prioritatea operatorilor si evaluarea
expresiilor conversii implicite si explicite
- instructiuni simple si blocuri de
instructiuni - structuri fundamentale de
control instructiunea if instructiunea switch,
instructiunea while, instructiunea do-while,
instructiunea for, instructiunile break si
continue.
2
Expresii si operatori O expresie este compusa
dintr-o succesiune de operanzi, legati prin
operatori. Un operand poate fi o constanta, o
variabila, un apel de metoda, o expresie
incadrata intre paranteze rotunde. Operatorii
desemneaza operatiile care se executa asupra
operanzilor si pot fi grupati pe categorii, in
functie de tipul operatiilor realizate. Operatorii
limbajului Java sunt unari (se aplica unui
singur operand) sau sunt binari (se aplica asupra
a doi operanzi). A. Operatorii aritmetici Operator
ii aritmetici sunt - inmultirea / -
impartirea - restul impartirii intregi
- adunarea - - scaderea. De asemenea este
folosit operatorul unar - (minus) pentru
schimbarea semnului, precum si operatorul unar
(plus) (introdus pentru simetrie).
3
Nota 1. Operatorul nu poate fi aplicat decat
operanzilor intregi. 2. Operatorul / poate fi
aplicat atat operanzilor intregi, cat si
operanzilor reali, dar functioneaza diferit
pentru operanzii intregi, fata de operanzii
reali. Daca cei doi operanzi sunt numere intregi,
operandul / are ca rezultat catul impartirii
intregi (fara parte fractionara). Daca cel putin
unul dintre cei doi operanzi este un numar real,
operandul / furnizeaza rezultatul impartirii
reale (cu parte fractionara). De exemplu Fie
declaratiile de variabile int a5, b7 float
x3.5
Expresie Rezultat
b2 1
a/2 2
x/2 1.75
4
B. Operatorii de incrementare/decrementare Operato
rul de incrementare este . Operatorul de
decrementare este --. Acesti operatori sunt
unari si au ca efect marirea (respectiv
micsorarea) valorii operandului cu 1. Limbajul
Java permite doua forme pentru operatorii de
incrementare / decrementare forma prefixata
(inaintea operandului) si forma postfixata (dupa
operand). Instructiunile care urmeaza
incrementeaza variabila total cu
1 total total Instructiunile care urmeaza
decrementeaza variabila total cu
1 total-- --total In cazul cand se foloseste
operatorul de incrementare / decrementare in
forma prefixata (inaintea operandului), limbajul
Java va incrementa / decrementa mai intai
valoarea variabilei si apoi va utiliza variabila
intr-o alta expresie. In cazul cand se foloseste
operatorul de incrementare / decrementare in
forma postfixata (dupa operand), limbajul Java va
utiliza mai intai valoarea variabilei intr-o alta
expresie si apoi va efectua operatia de
incrementare / decrementare.
5
De exemplu, daca valoarea curenta a lui x este 5,
atunci - evaluarea expresiei 3 x conduce la
rezultatul 18 - evaluarea expresiei 3 x
conduce la rezultatul 15, dupa care valoarea lui
x va fi in ambele cazuri 6. Operatorii de
incrementare / decrementare pot fi aplicati
operanzilor intregi, operanzilor in virgula
mobila si operanzilor de tipul char. C.
Operatori relationali Operatorii relationali sunt
operatori binari si desemneaza relatia de ordine
in care se gasesc cei doi operanzi lt, gt, lt,
gt. Rezultatul aplicarii unui operator
relational este true daca cei doi operanzi sunt
in relatia indicata de operator, si false,
altfel. De exemplu, expresiile logice 4 gt 6
are ca rezultat valoarea false, 8 lt 313 are
ca rezultat valoarea true. Un alt operator
relational este instanceof care testeaza daca un
anumit obiect este sau nu instanta a unei anumite
clase de obiecte (adica, apartine unei clase de
obiecte).
6
De exemplu Object o new Object( ) String s
new String( ) o instanceof Object - are ca
rezultat valoarea true, s instanceof String - are
ca rezultat valoarea true o instanceof String -
are ca rezultat valoarea false. D. Operatori de
egalitate Operatorii de egalitate sunt folositi
pentru testarea unei egalitati sau inegalitati
intre doua valori. Sunt operatori binari si arata
relatia de egalitate () sau inegalitate (!).
Rezultatul aplicarii unui operator de egalitate
este true, daca cei doi operanzi sunt in relatia
indicata de operator si false altfel. De
exemplu, expresiile logice 5 23 are ca
rezultat valoarea true, 5 ! 23 are ca rezultat
valoarea false.
7
E. Operatori logici globali se aplica asupra unor
operanzi de tip boolean. Exista trei operatori
logici globali - negatia logica (not)
reprezentata cu ! - conjunctie logica (si)
reprezentata cu - disjunctie logica (sau)
reprezentata cu . Rezultatul aplicarii
operatorilor logici este tot boolean. Iata toate
posibilitatile de combinare true true
true ! true false true false false !
false true false true false false
false false true true true true
false true false true true false
false false
8
Nota O regula importanta este ca operatorii
logici si folosesc evaluarea booleana
partiala (scurcircuitata). Aceasta inseamna ca
daca rezultatul poate fi determinat evaluand
prima expresie, a doua expresie nu mai este
evaluata. De exemplu, in expresia x ! 0 1/x
! 5 Daca x este 0, atunci prima jumatate are
valoarea false. Aceasta inseamna ca rezultatul
conjunctiei va fi fals, deci a doua expresie nu
mai este evaluata. F. Operatori la nivel de
biti Operatorii logici pe biti se aplica numai
operanzilor intregi (de tipul byte, short, int si
long) si au acelasi rezultat ca si operatorii
logici studiati (negatie, conjunctie, disjunctie
si disjunctie exclusiva) dar bit cu bit. De fapt,
operatorii se aplica reprezentarii binare a
numerelor implicate
9
Operatorii logici pe biti sunt
Operator Denumire Tip
Complementare (negatie) pe biti unar
Conjunctia logica (si) pe biti binar
Disjunctie exclusiva (sau exclusiv) pe biti binar
Disjunctie logica (sau) pe biti binar
Rezultatul aplicarii operatorilor de
complementare pe biti, de disjunctie logica pe
biti si de conjunctie logica pe biti este acelasi
cu cel prezentat la operatorii logici globali,
daca consideram ca 1 ar reprezenta adevarul si 0
falsul. Rezultatul aplicarii operatorului de
disjunctie exclusiva pe biti este
0 1
0 0 1
1 1 0
10
Operatiile logice la nivel de biti constau in
aplicarea operatiei respective perechilor de biti
de pe pozitii egale in cele doua numere (cu
exceptia operatiei de negare care este unara). In
situatia in care numerele nu au reprezentare
binara de aceeasi lungime, reprezentarea mai
scurta este completata cu zerouri nesemnificative
(inserate in fata reprezentarii) pana se obtin
dimensiuni egale. Iata cateva exemple de
folosire 3 4 7 5 7 2 3 0011
5 0101 4 0100 7 0111 --------- --------- 7
0111 2 0010 5 7 5 5 -6 5 0101
5 00101 7 0111 ---------- ---------
-6 11010 5 0101
11
Operatorii de deplasare pe biti au ca efect
deplasarea reprezentarii interne binare a
primului operand cu semn spre stanga (ltlt) cu n
pozitii, spre dreapta (gtgt) cu n pozitii sau
deplasarea primului operand fara semn spre
dreapta (gtgtgt) cu n pozitii. Numarul n de pozitii
care se deplaseaza este specificat de cel de-al
doilea operand. La deplasarea la stanga (ltlt),
pozitiile ramase libere in dreapta se completeaza
cu 0. La deplasarea la dreapta (gtgt), in pozitiile
ramase libere in stanga se copiaza in mod repetat
bitul de semn. La deplasarea la dreapta fara semn
(gtgtgt), pozitiile ramase libere in stanga se
completeaza cu 0. Observatie Expresia x ltlt n
are ca efect inmultirea operandului x cu 2n.
Expresia x gtgt n are ca efect impartirea intreaga
a operandului x cu 2n. Aceasta afirmatie este
valabila pentru numere intregi pozitive. De
exemplu 5 gtgt 1 2 adica reprezentarea binara
101 devine dupa deplasarea cu un bit la dreapta
010. 5 ltlt 1 10 adica reprezentarea binara 101
devine dupa deplasarea cu un bit la stanga 1010.
12
H. Operatori de atribuire Operatorii de atribuire
sunt operatori binari care permit modificarea
valorii unei variabile. Exista un operator de
atribuire simplu () si 10 operatori de atribuire
compusi cu ajutorul operatorului si al unui
alt operator binar (aritmetic sau logic pe
biti). O varianta de sintaxa folosita
este ltnume_variabilagt ltexpresiegt Efectul
aplicarii operatorului este Se evalueaza
ltexpresiegt, apoi se atribuie variabilei
ltnume_variabilagt valoarea expresiei. Nota
ltexpresiegt poate fi la randul ei o expresie de
atribuire, caz in care se realizeaza o atribuire
multipla. Atunci cand compilatorul intalneste o
operatie de atribuire multipla, el atribuie
valorile de la dreapta la stanga. ltnume_variabila1
gt ltnume_variabila2gt ltnume_variabilangt
ltexpresiegt Se foloseste atunci cand se doreste
sa se atribuie aceeasi valoare mai multor
variabile.
13
De exemplu total 0 suma 0 a 0 folosind
atribuirea multipla rezulta total suma a
0 A doua varianta de sintaxa folosita
este ltnume_variabilagt ltoperator_binargt
ltexpresiegt unde - ltoperator_binargt - este din
multimea , /, , , -, ltlt, gtgt, , ,
. Efectul aplicarii operatorilor de atribuire
compusi este echivalent cu instructiunea ltnume_va
riabilagt ltnume_variabilagt ltoperator_binargt
ltexpresiegt
14
De exemplu instructiunile total total
100 jumatate jumatate/2 b a a2 sunt
echivalente cu total 100 jumatate/ 2 b a
2 I. Operatorul de concatenare ( ) de siruri
de caractere este un operator binar folosit
pentru lipirea mai multor siruri de caractere La
concatenarea sirurilor de caractere, lungimea
sirului rezultat este suma lungimii sirurilor
care intra in operatie. Carcterele din sirul
rezultat sunt caracterele din primul sir, urmate
de cele dintr-al doilea sir in ordine. Daca cel
de-al doilea operand este un tip primitiv de
data, acesta este convertit la un sir de
caractere care sa reprezinte valoarea
operandului. De exemplu Acesta este un
sir este echivalent cu Acesta este un
sir Variabila a are valoarea 3 este
echivalent cu Variabila are valoarea 3
15
J. Operatorul conversie de tip (sau conversie
explicita de tip sau cast) este un operator unar
utilizat pentru a genera o variabila temporara de
un nou tip. Rezultatul unui cast este valoarea
operandului convertita la noul tip de data
exprimat de cast. O conversie explicita de tip
(un cast) este de forma (lttip_nougt)
ltexpresiegt unde - lttip_nougt - este noul tip de
data al expresiei ltexpresiegt altul decat cel
declarat initial sau implicit - ltexpresiegt -
este o variabila sau o expresie care se doreste a
fi convertita la tipul nou. De exemplu, in
secventa de instructiuni double f 7.8 int i
(int)f valoarea variabilei f este convertita la
o valoare intreaga si anume 7, si noua valoare
este atribuita variabilei i.
16
Observatie Nu toate cast-urile sunt valide in
Java. Vom reveni la descrirea conversiilor
explicite intr-un paragraf separat a acestei
lectii. K. Operatorul conditional ? Operatorul
conditional examineaza o conditie si returneaza o
valoare daca conditia este adevarata si alta daca
conditia este falsa. Sintaxa operatorului
conditional este (ltconditiegt) ?
ltrezultat_adevargt ltrezultat_falsgt unde -
ltconditiegt - o expresie de evaluat -
ltrezultat_adevargt -rezultatul returnat daca
conditia are valoarea true - ltrezultat_falsgt -
rezultatul returnat daca conditia are valoarea
false. De exemplu int i 5 int j 4 double f
(i lt j) ? 100.5 100.4 Instructiunea este
similara unei instructiuni if-else.
17
Prioritatea operatorilor si evaluarea
expresiilor Ordinea in care are loc efectuarea
prelucrarilor determinate de operatori este data
in urmatorul tabel de prioritati (de la
prioritate maxima la prioritate minima)
Categorie operator Exemple de operatori din categorie Regula de asociativitate la prioritate egala
Operatori de referinta . Stanga la dreapta
Unari -- ! operatorii si - unari cast-ul Dreapta la stanga
Multiplicativi / Stanga la dreapta
Aditivi - Stanga la dreapta
Deplasare pe biti ltlt gtgt gtgtgt Stanga la dreapta
Relationali lt lt gt gt instanceof Stanga la dreapta
Egalitate ! Stanga la dreapta
AND pe biti Stanga la dreapta
XOR pe biti Stanga la dreapta
OR pe biti Stanga la dreapta
18
Prioritati ale operatorilor - continuare
Categorie operator Exemple de operatori Regula de asociativitate la prioritate egala
AND logic Stanga la dreapta
OR logic Stanga la dreapta
Conditional ? Dreapta la stanga
Atribuire si cei 10 operatori de atribuire compusi Dreapta la stanga
Evaluarea expresiilor Evaluarea unei expresii
presupune calculul valorii expresiei, prin
inlocuirea in expresie a fiecarei variabile cu
valoarea ei si a fiecarei functii cu valoarea
returnata de functia respectiva si efectuarea
operatiilor specificate de operatori. In timpul
evaluarii expresiei se tine cont de existenta
parantezelor, de asociativitate si de prioritatea
operatorilor 1. In cadrul unei expresii fara
paranteze, se efectueaza operatiile in ordinea
prioritatii operatorilor 2. La prioritate egala,
operatorii vecini actioneaza conform regulilor
de asociativitate prezentate in tabelul de mai
sus. 3. Utilizarea parantezelor rotunde este mai
puternica decat prioritatea operatorilor.
19
De exemplu, programul urmator (operatori.java)
ilustreaza cativa operatori Java inclusiv
operatorul de concatenare pentru sirurile de
caractere care se afiseaza la ecran. /
Utilizarea operatorilor. / public class
Operatori public static void main(String
args) int a 6, b 7, c 3
System.out.println("a" a)
System.out.println("b" b)
System.out.println("c" c)
System.out.println() b c
System.out.println("a" a)
System.out.println("b" b)
System.out.println("c" c)
System.out.println() c
System.out.println("a" a)
System.out.println("b" b)
System.out.println("c" c)
System.out.println()
20
a System.out.println("a" a)
System.out.println("b" b)
System.out.println("c" c)
System.out.println() b a - c
System.out.println("a" a)
System.out.println("b" b)
System.out.println("c" c)
System.out.println() In urma
executiei programului Operatori.class pe ecran
sunt afisate valorile a6 a7 b7 b10 c3
c4 a6 a8 b10 b4 c3 c5 a6 b10 c4
21
Conversii Java acorda o atentie deosebita
tipurilor. Fiecare expresie are un tip ce poate
fi dedus din structura expresiei si din tipul
operanzilor ce intra in alcatuirea sa constante,
variabile si apeluri de metode. Sunt insa
permise, in anumite conditii bine precizate,
conversii de la un tip la un alt tip. Conversiile
pot aparea in urmatoarele situatii - la
atribuire, cand tipul unei expresii trebuie
convertit la tipul variabilei ce primeste
valoarea expresiei - la apelul unei metode cand
are loc transferul parametrilor actuali (reali)
catre parametrii formali - la conversii ce
implica tipul String ori ce tip poate fi
convertit la tipul String - la evaluarea unei
expresii aritmetice operanzii trebuie adusi la
un tip comun, astfel incat expresia sa poata fi
evaluata - la o conversie explicita.
22
Conversii implicite la evaluarea expresiilor In
aceasta categorie intra conversiile efectuate
automat, fara vreo precizare explicita in
program. Pentru tipurile primitive de date,
urmatoarele conversii sunt implicite byte la
short, int, long, float, double short la int,
long, float, double int la long, float,
double char la int, long, float, double long la
float, double float la double. Regula
conversiilor implicite la evaluarea expresiilor
este operandul care are un domeniu de valori mai
restrans este convertit la tipul operandului care
are multimea valorilor mai ampla.
23
Observatii 1. Unele din aceste conversii pot
conduce la o pierdere a preciziei. De exemplu, la
conversia unui long intr-un float, caz in care se
pierde o parte din cifrele semnificative
pastrandu-se insa ordinul de marime. Precizia se
pierde si in cazul conversiei long la double sau
int la float pentru ca, desi dimensiunea zonei
alocate pentru cele doua tipuri este aceeasi,
numerele flotante au nevoie de o parte din
aceasta zona pentru a reprezenta exponentul. In
aceste situatii, se va produce o rotunjire a
numerelor convertite. 2. Conversiile implicite
legate de tipul String se aplica numai
operanzilor cu tipuri primitive asupra carora se
aplica operatorul de concatenare () in acest
caz operanzii de un anumit tip diferit sunt
convertiti la String. 3. Conversiile implicite la
tipul referinta vor fi abordate intr-o lectie
viitoare. Conversii implicite la operatia de
atribuire Pentru tipurile primitive sunt admise
urmatoarele conversii implicite la atribuire -
tipul char poate fi atribuit unei variabile de
tip char, byte, short, int, long, float,
double - tipul byte poate fi atribuit unei
variabile de tip char, byte, short, int, long,
float, double
24
- tipul short poate fi atribuit unei variabile de
tip char, short, int, long, float, double -
tipul int poate fi atribuit unei variabile de tip
int, long, float, double - tipul long poate fi
atribuit unei variabile de tip long, float,
double - tipul float poate fi atribuit unei
variabile de tip float, double - tipul double
poate fi atribuit unei variabile de tipul double.
- tipul boolean nu poate fi atribuit la o
variabila de alt tip. Observatii 1. Valorile de
tip primitiv nu pot fi atribuite variabilelor de
referinta si, la fel, valorile de tip referinta
nu pot fi memorate in variabile de tip primitiv.
2. Conversiile implicite intre tipurile
referinta vor fi descrise intr-o lectie viitoare
dupa prezentarea tipului referinta si a
conceptului de clasa de obiecte.
25
Conversii explicite Conversiile explicite sunt
realizate de programator folosind operatorul de
conversie explicita (sau cast-ul). Pentru
tipurile primitive sunt admise, in plus fata de
cele implicite, urmatoarele conversii
explicite byte la chart char la byte,
short short la byte, char int la byte, short,
chart long la byte, short, char, int float la
byte, short, char, int, long double la byte,
short, char, int, long, float. Conversiile
explicite pot produce pierderi de precizie si, de
asemenea, pot conduce la o modificare a ordinului
de marime. Observatii 1.Nu se pot face
conversii explicite intre valorile de tip
referinta si valorile de tip primitiv. 2.
Valorile de tip boolean nu pot fi convertite la
nici un alt tip. 3. Conversiile explicite intre
tipurile referinta vor fi descrise intr-o lectie
viitoare dupa prezentarea tipului referinta si a
conceptului de clasa de obiecte.
26
Instructiuni simple si blocuri de instructiuni O
instructiune simpla este o singura instructiune,
cum ar fi aceea prin care se atribuie o valoare
unei variabile (instructiunea de atribuire) sau
se apeleaza o metoda. Un bloc de instructiuni
(numit si instructiune compusa) este o secventa
de instructiuni simple si declaratii de variabile
locale. Aceste instructiuni se executa in ordinea
in care apar in interiorul blocului. Sintactic,
blocurile de instructiuni sunt delimitate de
acolade. Blocurile de instructiuni pot fi incluse
(imbricate) in cadrul altor blocuri de
instructiuni. Sintaxa unui bloc de instructiuni
este ltdeclaratii_de_variabile_localegt
ltinstructiune_1gt ltinstructiune_2gt
ltdeclaratii_de_variabile_localegt
ltinstructiune_ngt unde - ltdeclaratii_de_variabi
le_localegt - reprezinta instructiuni de declarare
a unor variabile locale o instructiune de
declarare poate sa apara oriunde in interiorul
unui bloc.
27
Nota Declaratiile de variabile locale care apar
intr-un bloc sunt valabile numai in interiorul
blocului, din momentul declararii lor pana la
sfarsitul blocului. Instructiunea vida este o
instructiune care nu executa nimic. Ea este
formata numai din si se foloseste atunci cand
este obligatoriu sa avem o instructiune, dar nu
dorim sa executam nimic in acea
instructiune. Structuri fundamentale de
control A. Structuri alternative (de
decizie) Instructiunea if Sintaxa instructiunii
este if (ltexpresiegt) ltinstructiune_1gt else
ltinstructiune_2gt unde - ltexpresiegt - specifica
expresia de evaluat - ltinstructiune_1gt,
ltinstructiune_2gt - specifica instructiunile
(simple sau compuse) de executat.
28
Semantica se evalueaza ltexpresiegt si daca
valoarea expresiei este true, se executa
ltinstructiune_1gt, altfel se executa
ltinstructiune_2gt. Nota Instructiunea if poate sa
faca parte dintr-o alta instructiune if sau else,
adica instructiunile if pot fi incluse
(imbricate) in alte instructiuni if. De exemplu,
urmatorul program (denumit ArieTriunghi.java)
testeaza daca trei numere pot forma laturile unui
triunghi si daca da calculeaza aria triunghiului
folosind formula lui Heron. / Utilizarea
instructiunii if pentru determinarea ariei
triunghiului/ import java.io. public class
ArieTriunghi public static void main(String
args) throws IOException double x, y, z, p,
aria String s System.out.print ("Introduceti
x ") InputStreamReader isrx new
InputStreamReader(System.in)
BufferedReader brx new BufferedReader(isrx)
s brx.readLine() x
Double.parseDouble(s)
29
System.out.print ("Introduceti y ")
InputStreamReader isry new InputStreamReader(Sy
stem.in) BufferedReader bry new
BufferedReader(isry) s
bry.readLine() y Double.parseDouble(s)
System.out.print ("Introduceti z ")
InputStreamReader isrz new InputStreamReader(Sy
stem.in) BufferedReader brz new
BufferedReader(isrz) s
brz.readLine() z Double.parseDouble(s)
if (xlt0 ylt0 zlt0)
System.out.println("Numerele introduse nu sunt
laturi ale unui triunghi") else if
(xyltz xzlty yzltx)
System.out.println("Numerele introduse nu sunt
laturi ale unui triunghi") else p
(xyz)/2 aria Math.sqrt(p(p-x)(p-y)(p
-z)) System.out.println("Aria triunghiului
" aria)
30
Observatie Metoda sqrt() face parte din clasa de
obiecte Math care este implementata in pachetul
java.lang. Metoda sqrt() este de tip double si
are un parametru de tip double. Instructiunea
switch Sintaxa instructiunii este switch
(ltexpresiegt) case ltconstanta_1gt
ltgrup_de_instructiuni_1gt case ltconstanta_2gt
ltgrup_de_instructiuni_2gt case
ltconstanta_ngt ltgrup_de_instructiuni_ngt
default ltgrup_de_instructiuni_n1gt unde -
ltexpresiegt - specifica variabila sau expresia de
evaluat - ltconstanta_1gt, ltconstanta_2gt, ,
ltconstanta_ngt - specifica valorile constantelor
cu care se face compararea rezultatului evaluarii
expresiei - ltgrup_de_instructiuni_1gt, - o
instructiune sau un grup de instructiuni care se
executa in cazul in care o alternativa case se
potriveste.
31
Semantica se evalueaza ltexpresiegt se compara
succesiv valoarea expresiei cu valorile
constantelor ltconstanta_1gt, ltconstanta_2gt, ,
ltconstanta_ngt din alternativele case - daca se
intalneste o constanta din alternativa case cu
valoarea expresiei, se executa secventa de
instructiuni corespunzatoare si toate secventele
de instructiuni care urmeaza, pana la intalnirea
instructiunii break sau pana la intalnirea
acoladei inchise () care marcheaza sfarsitul
instructiunii switch - daca nici una dintre
valorile constantelor din alternativa case nu
coincide cu valoarea expresiei, se executa
secventa de instructiuni din alternativa default
(alternativa implicita sau prestabilita). Observat
ii 1. Spre deosebire de if-else, care permite
selectarea unei alternative din maximum doua
posibile, switch permite selectarea unei
alternative din maximum n1 posibile. 2. In
instructiunea if-else se executa instructiunea
(instructiunile) corespunzatoare valorii
expresiei si atat, in timp ce in instructiunea
switch se executa si toate secventele de
instructiuni ale alternativelor case urmatoare.
32
Nota Mai general, o alternativa poate avea mai
multe valori, ca in exemplul urmator case 1
case 2 case 3 case 5 ab bc c
a Instructiunea break din switch Sintaxa
instructiunii este break Semantica determina
iesirea neconditionata din instructiunea switch,
adica opreste executia secventelor de
instructiuni ale alternativelor case
urmatoare. Exemplu urmator (VocaleConsoane.java)
citeste de la tastatura o litera si determina
daca aceasta este o vocala sau o consoana.
33
// Exemplu pentru instructiunea switch import
java.io. public class VocaleConsoane
public static void main(String args) throws
IOException InputStreamReader isr
new InputStreamReader(System.in)
BufferedReader br new BufferedReader(isr)
System.out.print("Introduceti o litera
mica ") char c (char) br.read()
System.out.print(c " ")
switch(c) case 'a' case 'e' case
'i' case 'o' case 'u' System.out.println("vocal
a") break case 'y' case 'w'
System.out.println("Uneori vocale ") break
default System.out.println("consoana")

34
B. Structuri repetitive (iterative) Instructiunea
while Sintaxa instructiunii este while
(ltexpresiegt) ltinstructiunegt unde -
ltexpresiegt - specifica expresia de
testat Semantica se evalueaza ltexpresiegt -
daca valoarea expresiei este false se iese din
ciclul while - daca valoarea expresiei este
true, se executa instructiunea atat timp cat
valoarea expresiei este true.
35
Nota 1. Daca testul initial este false,
instructiunea din corpul ciclului nu este
executata niciodata. 1. Pentru ca ciclul sa nu
fie infinit, este obligatoriu ca una din
instructiunile care se executa in ciclul while sa
modifice cel putin una dintre variabilele care
intervin in ltexpresiegt, astfel incat aceasta sa
poata lua valoarea false sau sa contina o
operatie de iesire neconditionata din ciclu
folosind instructiunea break. 2. Instructiunea
while poate contine o secventa de instructiuni si
atunci aceasta secventa se grupeaza intr-o
singura instructiune compusa (incadrata intre
acolade). Exemple 1. Urmatorul program
(SumaCifre.java) citeste de la tastatura un numar
natural x (folosind fluxul de intrare System.in)
si calculeaza suma cifrelor lui x. Pentru a
calcula suma cifrelor lui x se procedeaza astfel
- pasul 1 - se obtine ultima cifra din numar
(cifra unitatilor) ca fiind restul impartirii
numarului x la 10 (x10), iar aceasta cifra se
adauga la suma - pasul 2 - se elimina din numar
ultima cifra (xx/10) cifra zecilor a devenit
acum ultima cifra - pasul 3 - se repeta pasul 1
si pasul 2 pana cand numarul x nu mai are cifre.

36
/ Utilizarea instructiunii while pentru
calculul sumei cifrelor unui numar natural
x/ import java.io. public class SumaCifre
public static void main(String args) throws
IOException int x, suma0 String
s System.out.print ("Introduceti numarul
natural ") InputStreamReader isrx
new InputStreamReader(System.in)
BufferedReader brx new BufferedReader(isrx)
s brx.readLine() x
Integer.parseInt(s) while (x !0) sumax
10 // obtin ultima cifra si adun la s ultima
cifra a lui x x/10 //elimin ultima cifra a
lui x System.out.println("Suma cifrelor
este " suma)
37
2. Urmatorul program (VocaleConsoane1.java)
citeste de la tastatura un sir de litere mici si
determina daca acestea sunt consoane sau vocale
// Exemplu pentru instructiunea While - citire
de litere si stabilire vocale sau consoane import
java.io. public class VocaleConsoane1
public static void main(String args) throws
IOException InputStreamReader isr
new InputStreamReader(System.in)
BufferedReader br new BufferedReader(isr)
System.out.print("Introduceti litere mici
despartite de spatii sau nu ") char c
(char) br.read() while (c !'\r' )
switch (c) case 'a' case
'e' case 'i' case 'o' case 'u'
System.out.println(c"" "vocala")
break case 'y' case 'w'
System.out.println(c"" "Uneori vocale ")
break case ' ' break default
System.out.println(c"""consoana")
c (char) br.read()
38
Instructiunea do-while Sintaxa instructiunii
este do ltinstructiunegt while
(ltexpresiegt) unde - ltinstructiunegt - o
instructiune simpla de executat - ltexpresiegt -
specifica expresia de testat (de
evaluat) Semantica se executa instructiunea si
apoi se evalueaza expresia - daca valoarea
expresiei este false se iese din ciclul
do-while - daca valoarea expresiei este true se
executa instructiunea (din ciclul do-while) atit
timp cat valoarea expresiei este adevarata.
39
Nota 1. Spre deosebire de instructiunea while,
instructiunea do-while executa instructiunea
specificata in corpul ciclului cel putin o data,
chiar daca de la inceput valoarea expresiei este
false, deoarece evaluarea expresiei se face dupa
executia instructiunii. 2. Pentru ca ciclul sa nu
fie infinit, este obligatoriu ca una din
instructiunile care se executa in ciclul do-while
sa modifice cel putin una dintre variabilele care
intervin in ltexpresiegt, astfel incat aceasta sa
poata lua valoarea false sau sa contina o
operatie de iesire neconditionata din ciclu
folosind instructiunea break. 3. Instructiunea
do-while poate contine o secventa de instructiuni
si atunci aceasta secventa se grupeaza intr-o
singura instructiune compusa (incadrata intre
acolade). Instructiunile while si do-while sunt
folosite in functie de momentul la care dorim sa
testam o conditie care determina efectuarea unor
prelucrari repetate. Cand este necesar sa testam
o conditie inainte de efectuarea unor prelucari
repetate atunci se foloseste instructiunea while.
Cand conditia depinde de la inceput de
prelucrarile repetate din ciclu (prin urmare,
este necesar sa fie testata dupa executarea
prelucrarilor din ciclu) atunci se foloseste
instructiunea do-while.
40
Urmatorul program (CifraControl.java) citeste de
la tastatura un numar natural x si calculeaza
cifra de control a lui x. Cifra de control a unui
numar natural se obtine calculand suma cifrelor
numarului, apoi suma cifrelor sumei obtinute,
s.a.m.d. pana la obtinerea unei singure cifre. De
exemplu, pentru x 335 calculam suma cifrelor
335 11. Cum suma nu este formata dintr-o
singura cifra, repetam procedeul 112. Deci 2
este cifra de control a lui 335. / Utilizarea
instructiunii while pentru calculul cifrei de
control a unui numar natural x / import
java.io. public class CifraControl public
static void main(String args) throws
IOException int x, suma0 String
s System.out.print ("Introduceti numarul
natural ") InputStreamReader isrx
new InputStreamReader(System.in)
BufferedReader brx new BufferedReader(isrx)
s brx.readLine() x
Integer.parseInt(s)
41
do while (x !0) sumax10 //
adun la s ultima cifra a lui x x/10 //elimin
ultima cifra a lui x System.out.println("S
uma cifrelor numarului " suma) x suma
//actualizez numarul cu suma cifrelor sumei
suma 0 while (x gt9) // suma cifrelor
sumei trebuie sa aiba o singura
cifra System.out.println("Cifra de control a
numarului este " x)
42
Instructiunea for Este folosita pentru efectuarea
unor prelucrari de un anumit numar de
ori. Sintaxa instructiunii este for
(ltvaloare_initialagt ltconditie_sfarsitgt
ltvaloare_incrementgt) ltinstructiunegt Instructiu
nea for foloseste, de obicei, o variabila
denumita variabila de control care indica de cate
ori s-a executat instructiunea (ltinstructiunegt)
din corpul ciclului. Instructiunea for contine
patru sectiuni - sectiunea ltvaloare_initialagt
atribuie variabilei de control o valoare
initiala, care, de cele mai multe ori, este 0 sau
1 - sectiunea ltconditie_sfarsitgt testeaza
valoarea variabilei de control pentru a stabili
daca programul a executat instructiunea de atatea
ori cat s-a dorit - sectiunea
ltvaloare_incrementgt adauga (scade), de obicei,
valoarea 1 la variabila de control, de fiecare
data, dupa ce se executa instructiunea din corpul
ciclului valoarea de incrementare sau
decrementare poate fi diferita de 1 - sectiunea
ltinstructiunegt reprezinta instructiunea (sau
instructiunile) care se doreste (doresc) a fi
repetata (repetate).
43
Pentru intelegerea efectului instructiunii for,
sa luam de exemplu urmatoarea instructiune for,
care va afisa pe ecran numerele de la 1 la
10 for ( contor 1 contor lt 10 contor)
System.out.println(contor) In acest exemplu,
contor este variabila de control a ciclului for.
Instructiunea for se executa astfel - pasul 1
se atribuie valoarea 1 variabilei contor -
pasul2 se evalueaza conditia (de sfarsit a
ciclului) contor lt 10 - pasul 3 - daca
contor gt 10 (valoarea conditiei este false) se
iese din instructiunea repetitiva for -
daca contor lt 10 (valoarea conditiei este
true) - se executa instructiunea imediat
urmatoare (din corpul ciclului) care, in
exemplul dat, este println - se
incrementeaza valoarea variabilei contor cu
1 - se revine la pasul 2.
44
Nota 1. Instructiunea for poate contine o
secventa de instructiuni si atunci aceasta
secventa se grupeaza intr-o singura instructiune
compusa (incadrata intre acolade). 2. Atat
ltvaloare_initializaregt cat si ltvaloare_incrementgt
pot folosi operatorul virgula (,) pentru a
permite expresii multiple. Urmatorul fragment de
cod ilustreaza aceasta tehnica for (i 0, sum
0 i lt n i, sum i) System.out.println(i
\t sum) 3. Oricare dintre primele trei
sectiuni care intervin in for poate sa fie omisa.
Dar si in acest caz, caracterul separator punct
si virgula () trebuie sa apara daca
ltconditie_sfarsitgt lipseste valoarea sa implicita
este true. 4. Poate fi omisa si sectiunea de
instructiuni din corpul ciclului (buclei) for,
caz in care se spune ca avem o bucla for vida.
45
Pentru a exemplifica instructiunea for, programul
urmator (VocaleConsoaneRandom.java) creaza 10
litere aleator si determina daca acestea sunt
vocale sau consoane. Metoda Math.random face
parte din clasa Math care se gaseste in pachetul
java.lang si este folosita in program pentru a
genera o valoare aleatoare in intervalul 0, 1).
Prin inmultirea valorii returnate de aceasta
functie cu numarul de litere din alfabet (26
litere) se obtine un numar in intervalul 0, 26).
Adunarea cu prima litera (a, care are de fapt
valoarea 97, codul ASCII al literei a) are ca
efect transpunerea in intervalul 97, 123). In
final se foloseste operatorul de conversie
explicita de tip pentru a trunchia numarul la o
valoare din multimea 97, 98, , 122, adica un cod
ASCII al unui caracter din alfabetul englez.
46
// Program demonstrativ pentru instructiunea For
- vocale/consoane public class
VocaleConsoaneRandom public static void
main(String args) for (int i 0 i lt
10 i) char c (char) (Math.random()
26 'a') System.out.print(c " ")
switch(c) case 'a' case 'e' case 'i'
case 'o' case 'u' System.out.println("vocala
") break case 'y' case
'w' System.out.println("Uneori vocale
") break default System.out.println(
"consoana")
47
Instructiunile break si continue Instructiunea
break permite intreruperea instructiunilor care
se repeta in corpul ciclului for, while sau
do-while. De obicei, instructiunea break apare in
cadrul unei instructiuni if, ca in exemplul
urmator while () if
(conditie) break In cazul
in care sunt doua cicluri imbricate,
instructiunea break intrerupe doar ciclul cel mai
interior. Instructiunea breack etichetata este
folosita cand sunt mai mult de doua cicluri
imbricate. In acest caz, o anumita instructiune
de ciclare este etichetata si instructiunea
breack poate fi aplicata acelei instructiuni de
ciclare, indiferent de numarul de cicluri
imbricate.
48
Un exemplu eticheta while ()
while () if
(conditie) breack eticheta
Instructiunea continue permite terminarea
iteratiei curente din ciclu for, while sau
do-while si trecerea la urmatoarea iteratie a
ciclului. Se aplica doar ciclului cel mai
interior, in cazul ciclurilor imbricate.
49
Urmatorul fragment de cod tipareste primele 50 de
numere intregi, cu exceptia celor divizibile cu
10 for (int i1 ilt50 i) if (i10
0) continue System.out.println(i)
Write a Comment
User Comments (0)
About PowerShow.com