Programare Java Curs - 1
INSTRUCTIUNI SI EXPRESII Toate activitatile ce se realizeaza
intr-un program Java pot fi rezumate la o serie de instructiuni . O
instructiune ( statement ) este o comanda simpla , scrisa intr-un
limbaj de programare si care determina o actiune . Instructiunile
sunt actiuni elementare ale unui program Java . Mai jos putem vedem
mai multe exemple de instructiuni Java simple : int varsta=30;
import java.awt.dnd; System.out.println(Text ); Jucator.scor=45000;
Unele instructiuni produc o valoare , ca in cazul in care se aduna
doua numere . Aceste instructiuni se numesc expresii . O expresie
este o instructiune care are ca rezultat producerea unei valori .
Valoarea poate fi pastrata pentru o folosire ulterioara in program
, poate fi folosita imediat intr-o alta instructiune sau poate fi
ignorata . Valoarea produsa de o instructiune este numita valoare
de retur . Unele expresii produc o valoare de retur numerica , cum
ar fi cazul cand se aduna doua numere ; altele produc valori
booleene adevarat sau fals sau pot produce chiar un obiect Java .
Chiar daca majoritatea programelor Java contin o singura
instructiune pe fiecare linie aceasta este doar o optiune de
formatare , care nu stabileste unde incepe si unde se termina o
instructiune ci are scopul principal de a mari lizibilitatea
programului . De fapt , fiecare instructiune Java se termina cu ; .
Intr-o singura linie se pot introduce astfel mai multe instructiuni
fara a determina probleme : j.culoare=galben; j.alegere=false;
Instructiunile sunt grupate in Java folosind acoladele { si } . Un
grup de instructiuni organizate intre acolade se numeste bloc .
VARIABILE SI TIPURI DE DATE
Variabilele reprezinta un loc unde poate fi pastrata informatia
intr-un program aflat in executie . Valoarea poate fi modificata
oricand in cadrul programului . Pentru a crea o variabila trebuie
sa ii dati un nume si sa stabiliti ce tip de informatie va stoca .
De asemenea , in momentul crearii puteti sa atribuiti variabilei o
valoare initiala . Exista trei tipuri de variabile in Java :
variabile de instanta , variabile de clasa si variabile locale .
Variabilele de instanta sunt folosite pentru a defini atributele
unui obiect . Variabilele de clasa definesc atributele unei intregi
clase de obiecte si se aplica tuturor instantelor acesteia .
Variabilele locale sunt folosite in interiorul definitiilor
metodelor sau al blocurilor de instructiuni din cadrul unei metode
. Ele pot fi folosite doar atunci cand metoda sau blocul este
executat de interpretorul Java , dupa care isi inceteaza existenta
.
-1-
Cu toate ca aceste trei tipuri de variabile sunt create
asemanator , variabilele de clasa si de instanta sunt folosite
intr-un alt mod decat variabilele locale . In continuare vom trata
variabilele locale celelalte doua tipuri vor fi detaliate mai
tarziu . OBS : Spre deosebire de alte limbaje Java nu are variabile
globale ( utilizabile in orice parte a unui program ) . Variabilele
de clasa si de instanta sunt folosite pentru a comunica informatii
despre un obiect sau altul si pot inlocui nevoia de variabile
globale . Inainte de a folosi o variabila in Java trebuie mai intai
sa o declaram prin indicarea numelui si a tipului de informatie pe
care il va stoca . Formatul declaratiei este prezentat in
continuare , specificandu-se intai tipul de informatie si apoi
numele : int maxim; String numeutilizator; boolean stareTerminare;
Variabilele locale pot fi declarate in orice loc in interiorul unei
metode , la fel ca oricare alta instructiune Java insa trebuie
declarate inainte de a fi folosite . In mod normal declararea
variabilelor urmeaza imediat dupa instructiunea care defineste
metoda . Public static void main(String argumente[]) { int total;
String titlu; Boolean activare; } Daca vrem sa cream mai multe
variabile de acelasi tip le putem declara pe toate in aceeasi
instructiune , separate de , : String strada , oras , tara ;
Variabilelor li se poate atribui o valoare atunci cand sunt create
prin atribuire : int codposta=7000; String nume=Alex; boolean
alegere=true; int varsta=50 , inaltime=170; Dupa cum se poate vedea
avem si posibilitatea de a atribui valori mai multor variabile de
acelasi tip . Variabilelor locale trebuie sa li se atribuie valori
inainte de a fi folosite in program , altfel acestea nu se vor
compila . Definitiile variabilelor de instanta si de clasa primesc
o valoare initiala in functie de tipul informatiei pe care o
stocheaza : variabilele numerice : 0 caracterele : \0 variabilele
booleene : false obiectele : null
Numele variabilelor in Java trebuie sa inceapa cu o litera , cu
underscore ( _ ) sau cu $ ele nu pot incepe cu o cifra . Dupa
primul caracter numele variabilelor pot contine orice combinatie de
cifre si litere . Trebuie sa retinem ca Java tine cont de litere
mari si mici . Din aceasta cauza un program poate avea doua
variabile diferite : una numita X si alta x sau una alb si alta ALB
. In practica s-a impus o regula de denumire a variabilelor Java :
numele sunt formate din cuvinte sugestive iar in cazul in care sunt
necesare mai multe cuvinte primul caracter al numelui este mic iar
inceputul fiecarui cuvant este scris cu majuscula , ca in exemplele
de mai jos :
-2-
Button incarcaFisier; int codZona; boolean
definesteScorMaxim;
TIPURI DE VARIABILE Dupa cum am vazut declaratia de variabila
contine in afara numelui si tipul informatiei stocate . Acest tip
poate fi : un tip de date de baza numele unei clase sau interfete
un tablou
In continuare prezentam tipurile de date de baza ale limbajului
. Exista opt tipuri de baza pentru stocarea intregilor , numerelor
in virgula mobila , caracterelor si valorilor booleene . Aceste
tipuri mai sunt cunoscute si ca tipuri primitive deoarece fac parte
integranta din limbajul Java si nu sunt obiecte , lucru care le
face mai eficient de folosit . Aceste tipuri de date au aceeasi
dimensiune si caracteristici indiferent de sistemul de operare si
de platforma folosita spre deosebire de alte tipuri de date din
alte limbaje de programare . Pentru stocare intregilor avem patru
tipuri de date : - byte - short - int - long - pe 8 biti - valori
intre -128 si 127 - pe 16 biti - valori intre -32768 si 32767 - pe
32 biti - valori intre -2147483648 si 2147483647 - pe 64 biti -
valori intre -9223372036854775808 si 9223372036854775807
Toate aceste tipuri sunt cu semn ceea ce inseamna ca pot stoca
numere pozitive sau negative . Tipul folosit pentru o variabila
depinde de domeniul de valori de care este nevoie . Un alt tip de
numar ce poate fi stocat este cel reprezentat in virgula mobila ;
pentru acestea exista tipurile float si double . Numerele in
virgula mobila sunt numerele care au o parte zecimala . Tipul float
este suficient in majoritatea cazurilor , pastrand numere intre
1,4E-45 si 3,4E38 . Daca totusi este necesar se poate folosi tipul
real double ce poate stoca numere intre 4,9E-324 si 1,7E308 . Tipul
char este folosit pentru caracterele individuale , cum ar fi litere
, cifre , semne de punctuatie si alte simboluri . Ultimul dintre
cele opt tipuri de baza este boolean . Spre deosebire de alte
limbaje valorile pentru variabilele de acest tip nu sunt 1 si 0 ci
true si false . Toate tipurile de variabile prezentate folosesc
litere mici si asa trebuie folosite in cadrul programelor . Exista
clase care au aceleasi nume cu acestea , dar incep cu litera mare
de exemplu Boolean sau Char . Aceste clase au alt rol in
programarea Java astfel incat trebuie folosite diferit de tipurile
de baza .
TIPURI DE CLASE
In afara celor opt tipuri de baza o variabila poate fi de tip
clasa : String numeDeFamilie=Popescu; Culoare par; Atunci cand o
variabila are drept tip o clasa inseamna ca variabila refera un
obiect al clasei respective sau al uneia dintre subclasele sale .
Referirea la o superclasa ca tip de variabila este folositoare
atunci cand variabila poate fi una dintre mai multe subclase
diferite . Declararea unei variabile de tip Object inseamna ca
poate stoca orice obiect .
-3-
OBS : Java nu are un echivalent al instructiunii typedef din C .
Pentru a declara noi tipuri in Java se declara o noua clasa iar
variabilele pot folosi aceasta clasa drept tip . Dupa ce o
variabila a fost declarata i se poate da o valoare folosind
operatorul de atribuire , = : idCod=8546; imbracatRapid=false;
COMENTARII
Una dintre metodele cele mai importante de crestere a
lizibilitatii unui program este folosirea comentariilor .
Comentariile reprezinta informatii introduse intr-un program doar
in ajutorul persoanelor care incearca sa-si dea seama ce anume se
intampla in program . Compilatorul Java ignora total comentariile
atunci cand pregateste versiunea executabila a fisierului sursa
Java . Exista trei tipuri diferite de comentarii pe care le putem
utiliza in programele Java . Prima modalitate de a introduce
comentarii in program este de a il prefixa cu doua simboluri slash
// . Orice incepe dupa aceste semne si pana la sfarsitul liniei
este considerat comentariu : int oreCredit=3; // defineste orele de
credit pentru curs Daca dorim sa introducem un comentariu care
ocupa mai mult de un rand trebuie sa incepem cu combinatia /* si sa
incheiem cu combinatia */ . Ultimul tip de comentariu este
proiectat pentru a fi interpretabil si de catre calculator . Daca
incepem comentariul cu /** si il incheiem cu */ atunci comentariul
este interpretat ca reprezentand documentatia originala referitoare
la functionarea clasei si a metodelor sale publice . Acest tip de
comentariu poate fi citit de utilitare ca JAVADOC din pachetul JDK
. Acest utilitar foloseste aceste comentarii pentru a crea un set
de pagini web care documenteaza programul , ierarhia sa de clase si
metodele .
LITERALE
Literalele sunt numerele , textul si alte informatii care
reprezinta direct o valoare . Mai explicit , literalele reprezinta
un termen apartinand programarii , care inseamna de fapt ca ceea ce
tastam este ceea ce vom obtine . Java are mai multe literale pentru
intregi . Numarul 4 de exemplu este un literal pentru tipul int .
El poate fi atribuit de asemenea variabilelor byte sau short
deoarece el este suficient de mic si pentru aceste doua tipuri . Un
literal intreg mai mare decat poate stoca o variabila int este
considerat automat ca avand tipul long . Putem indica faptul ca un
literal este un intreg de tip long prin adaugarea sufixului L ( sau
l ) . De exemplu urmatoarea instructiune stocheaza valoarea 4
intr-un intreg de tip long : long totalPagini=4L; Pentru a
reprezenta o valoare negativa putem folosi literalul impreuna cu
semnul minus ( ) . In Java putem folosi si literali in sistem octal
sau hexazecimal . Pentru a folosi un literal intreg in octal
trebuie sa il prefixam cu cifra 0 ; numarul octal 777 trebuie
astfel scris ca 0777 . Intregii hexazecimali se folosesc prefixati
cu 0x ca de exemplu 0xFF .
-4-
Literalele in virgula mobila folosesc caracterul punct pentru
punctul zecimal . Toate literalele in virgula mobila sunt automat
considerate de tip double . Pentru a specifica tipul float adaugam
F ( sau f ) ca mai jos : float valoarePi=3.1415F; Putem folosi si
exponenti in literalele de virgula mobila folosind litera E ( sau e
) urmata de exponent : double x=12e22; doube y=19E-70; Literalele
caracter sunt exprimate printr-un singur caracter incadrat de
ghilimele simple : a , # sau 3 . Unele caractere literale
reprezinta caractere care nu sunt tiparibile sau accesibile pe
tastatura . Mai jos vom vedea coduri speciale care pot reprezenta
aceste caractere speciale : \n = new line ( linie noua ) \t = tab
\b = backspace \r = revenire la capat de rand ( carriage return )
\f = formfeed ( salt la pagina noua ) \\ = semnul \ \ = ghilimele
simple \ = ghilimele duble \_ = octal \x_ = hexazecimal \u_ =
caracter unicode ( standard pe 16 biti spre deosebire de ASCII
standard care presupune doar 128 de caractere )
In cazul ultimelor trei coduri se va inlocui in practica semnul
_ cu un numar sau o cifra hexazecimala . Ultimele literale pe care
le putem folosi intr-un program Java sunt sirurile de caractere .
Un sir ( string ) in Java este un obiect si nu un tip de date
primar . Sirurile nu sunt pastrate in tablouri ( ca in C de exemplu
) . Deaorece sirurile sunt obiecte Java avem si metode care pot fi
folosite pentru combinarea si modificarea sirurilor precum si
pentru a determina daca doua siruri au aceeasi valoare . Literalele
sir constau dintr-o serie de caractere incadrate intre ghilimele
duble : String autor=Ion Popescu; String parola=password; Sirurile
pot contine si caractere speciale prezentate anterior : String
exemplu=Text intre ghilimele \CITAT\; System.out.println(Primul
rand \n Al doilea rand); String titlu=Invatati singuri Java\u2122;
In ultima instructiune , secventa \u2122 produce simbolul TM ( pe
sistemele configurate sa suporte Unicode ) . Atunci cand se
foloseste un literal sir Java stocheaza valoarea sa ca obiect
String . Nu trebuie sa cream explicit un nou obiect ca in cazul
celorlalte obiecte cu care vom lucra deci este la fel de usor de
lucrat cu acest tip ca si cu tipurile primare . Sirurile sunt
diferite in ceea ce priveste acest aspect nici unul dintre tipurile
primare nu sunt pastrate ca obiecte atunci cand sunt folosite .
EXPRESII SI OPERATORI .
-5-
O expresie reprezinta o instructiune care produce o valoare .
Cele mai folosite expresii sunt cele matematice ca in continuare :
int x=3; int y=4; int z=x*y; Ultima instructiune dintre cele de mai
sus este o expresie . Operatorul de multiplicare * este folosit
pentru inmultirea dintre x si y iar rezultatul produs de expresie
va fi pastrat intr-o variabila z de tip intreg . Valoarea produsa
de o expresie este numita si valoare de retur . Aceasta valoare
poate fi atribuita unei variabile si folosita in diferite feluri in
programele noastre . Operatorii reprezinta simboluri speciale
folosite in functii matematice , in unele tipuri de instructiuni de
atribuire sau in comparatii logice .
OPERATII ARITMETICE
In Java exista cinci operatori folositi pentru operatiile
aritmetice de baza : + * / % Adunare Scadere Inmultire Impartire
Modulo
Fiecare operator de mai sus foloseste cate doi operanzi cate
unul de fiecare parte a operatorului . Operatorul de scadere poate
fi folosit si pentru a nega un singur operator . Un lucru care
merita atentie sporita in ceea ce priveste operatorul de impartire
este tipul operanzilor folositi . Daca stocam rezultatul unei
impartiri intr-un intreg acesta va fi rotunjit la un numar intreg
pentru ca tipul int nu poate lucra cu valori in virgula mobila . De
exemplu expresia 21 / 5 are rezultatul 4 daca acesta este stocat
intr-un int . Impartirea modulo ( % ) produce ca rezultat restul
impartirii . In expresia 21 / 5 rezultatul pe care il vom obtine va
fi 1 . In general majoritatea operatiilor aritmetice cu intregi
produc un rezultat de tip int indiferent de tipul initial al
operanzilor . Daca lucram cu alte tipuri numere in virgula mobila
sau intregi long trebuie sa ne asiguram ca operanzii au acelasi tip
cu cel la care vrem sa ajungem . Mai jos avem prezentat un exemplu
care integreaza folosirea tuturor operatorilor aritmetici :
class Amoeba { public static void main (String argumente[]) {
int x=6; short y=4; float a=.12f; System.out.println("ati inceput
cu " + x + " amoebe"); System.out.println("\tDoua s-au casatorit si
partenerii lor s-au mutat la ele."); x=x+2;
System.out.println("Aveti acum " + x); System.out.println("\tSe
declanseaza mitoza , care dubleaza numarul de amoebe."); x=x*2;
System.out.println("Avem acum " + x); System.out.println("\tIncepe
o lupta. " + y + " amoebe pleaca.");
-6-
x=x-y; System.out.println("Avem acum " + x);
System.out.println("\tAtac al paramecilor ! Am pierdut o treime din
colonie."); x=x-(x/3); System.out.println("Am ramas cu " + x + "
amoebe"); System.out.println("Costul intretinerii zilnice per
amoeba : " + a); System.out.println("Costul total al intretinerii
zilnice : " + (a*x)); } }
Comentand pe scurt aceasta aplicatie Java extrem de simpla
observam ca in liile 3- 5 se creaza trei variabile ce primesc in
acelasi timp si valori initiale ; variabilele x si y sunt declarate
de tipul int iar variabila a este declarata numar in virgula mobila
float deoarece tipul predefinit in Java pentru numere in virgula
mobila este double trebuie sa adaugam sufixul f la sfarsitul
literalului pentru a indica ( si forta ) tipul float . In cadrul
programului apare in mai multe instructiuni sintagma
System.out.println ; Aceasta metoda este folosita in aplicatii
pentru a afisa siruri si in general informatii pe dispozitivul
standard de iesire in cele mai multe cazuri ecranul .
System.out.println() preia un singur argument ( intre paranteze ) :
un sir . Pentru a prezenta mai mult de o variabila sau un literal
ca argument pentru println() se poate folosi operatorul + , pentru
a concatena aceste elemente intr-un singur sir .
ATRIBUIREA UNEI VALORI
Atribuirea este o expresie , ea producand un rezultat . In
practica atribuirea poate apare intr-un sir de instructiuni :
x=y=z=10; Rezultatul acestei instructiuni este initializarea celor
trei variabile cu valoarea 10 . Partea din dreapta a unei expresii
de atribuire este intotdeauna calculata inainte de a avea loc
atribuirea propriu-zisa . Acest lucru face posibila folosirea unei
expresii de felul urmator : int x=5; x=x+2; Logic se calculeaza
intai x+2 , rezultatul fiind 7 si apoi aceasta valoare este
atribuita variabilei x . Atribuirea este operatia cea mai des
intalnita in programare si in consecinta au aparut mai multi
operatori speciali pentru diferite cazuri de atribuire . Mai jos
vom vedea operatorii de atribuire speciali precum si echivalentele
functionale ale acestora :
X+=Y X-=Y X*=Y X/=Y
X=X+Y X=X-Y X=X*Y X=X/Y
Acesti operatori de atribuire sunt echivalenti perfect cu
instructiunile pe care le inlocuiesc dar trebuie avuta mare atentie
la utilizarea lor ; in cazul folosirii acestor operatori in cadrul
unor expresii mai complexe exista cazuri in care acesti operatori
nu mai sunt echivalenti . Ca exemplu putem lua situatia urmatoare :
X=20; Y=5; X=X/Y+5; si X/=Y+5;
-7-
Rezultatele celor doua instructiuni vor fi diferite : in primul
caz rezultatul va fi 9 iar in cel de-al doilea 2.
INCREMENTAREA SI DECREMENTAREA
O alta operatie uzuala in programare este adaugarea sau scaderea
unei unitati dintr-o variabila intreaga . Exista operatori speciali
pentru aceste expresii operatori numiti de incrementare si
decrementare . Incrementarea unei variabile inseamna a adauga 1 la
valoarea sa iar decrementarea unei variabile inseamna a scadea 1
din valoarea sa . Operatorul de incrementare este ++ iar cel pentru
decrementare este . Acesti operatori sunt plasati imediat inainte
sau dupa numele unei variabile : int X=7; X=X++; In exemplul de mai
sus variabila X este incrementata de la 7 la 8 . In cazul in care
operatorii de incrementare sau decrementare sunt plasati inaintea
variabilei atunci ei se numesc operatori prefix iar in cazul in
care apar dupa variabila se numesc operatori sufix . Intr-o
expresie simpla , de exemplu variabila-- , folosirea unui operator
prefix sau sufix nu schimba rezultatul . Atunci cand operatiunile
de incrementare sau decrementare fac parte dintr-o expresie mai
complexa optiunea intre prefix si sufix devine importanta . Sa
comentam putin exemplul de mai jos : int x,y,z; x=42; y=x++ ; z=++x
; Aceste doua expresii produc rezultate diferite din cauza
diferentelor intre operatorii sufix si prefix . Atunci cand folosim
operatori sufix , ca in y=x++ , variabila y primeste valoarea lui x
inainte ca aceasta sa creasca cu 1 astfel incat y va fi egal cu 42
; la folosirea operatorilor prefix , ca in z=++x , variabila x este
mai intai incrementata si apoi valoarea sa este atribuita lui y ,
astfel incat z va avea valoarea 44 . Ca si incazul operatorilor
speciali de atribuire trebuie avuta mare grija in cazul folosirii
operatorilor de incrementare si decrementare in cazul unor expresii
mai complexe existand posibilitatea introducerii unei erori destul
de greu de depistat in cadrul programului .
OPERATORI PENTRU COMPARATII
Java poseda mai multi operatori folositi pentru a face
comparatii intre variabile , intre variabile si literale sau intre
alte tipuri de informatie dintr-un program Java . Acesti operatori
sunt folositi in expresii care intorc valori booleene true si false
, in functie de valoarea de adevar a comparatiei . In cele ce
urmeaza prezentam operatorii de comparatie uzitati in Java :
Operator == != < > =3
In continuare avem un exemplu practic de folosire a unei
comparatii : boolean tanar; int varsta=41; tanar=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)
- 16 -
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;
- 17 -
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 .
- 18 -
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); } }
- 19 -
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 printro
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