Sunteți pe pagina 1din 16

smaranda.belciug@inf.ucv.

ro Laborator 2 Lecii despre obiecte n laboratorul de azi vor fi prezentate urmtoarele subiecte: Crearea obiectelor (denumite i instane) Testarea i modificarea variabilelor de clas i de instan n acele obiecte Apelarea metodelor unui obiect Conversia obiectelor i a altor tipuri de date dintr-o clas n alta Crearea de noi obiecte Folosirea operatorului new Pentru a crea un obiect nou, folosii operatorul new mpreun cu numele clasei dup modelul creia dorii s creai o instan, urmat de paranteze: String numeEchipa = new String(); Random infoAleatoare = new Random(); Jabberwock j = new Jabberwock(); Parantezele sunt importante!! Nu le omitei!! Obiecte create cu argumente: GregorianCalendar data = new GregorianCalendar (64,6,6,7,30); Point pt = new Point(0,0); Numele i tipul argumentelor pe care le folosii n interiorul parantezelor mpreun cu operatorul new sunt definite de clas folosind o metod special denumit constructor. Exemplu. Vom crea mai multe tipuri de obiecte care folosesc diferite numere i tipuri de argumente: clasa Random, care face parte din pachetul java.util, creeaz obiecte folosite pentru generarea de numere aleatoare. Aceste obiecte sunt numite generatoare de numere aleatoare. Se folosesc la jocuri sau alte programe n care e nevoie de un element aleator.
import java.util.Random; class NumereAleatoare { public static void main(String args[]){ Random r1,r2; r1 = new Random(); System.out.println("Valoarea aleatoare 1: " + r1.nextDouble()); r2 = new Random(8675309); System.out.println("Valoarea aleatoare 2: " + r2.nextDouble());

smaranda.belciug@inf.ucv.ro
}//end main }//end class Valoarea aleatoare 1: 0.3299649615373069 Valoarea aleatoare 2: 0.754788115099576

n acest exemplu, dou obiecte Random diferite sunt create folosind diferite argumente pentru clasa introdus dup operatorul new. n prima apariie, se folosete new Random(), fr argumente, care creeaz un obiect Random avnd ca smn (seed) ora curent. Valoarea obinut pentru prima linie a rezultatului depinde de ora la care se ruleaz programul. Al doilea n schimb folosete ca smna un literal, deci valoarea trebuie s fie ntotdeauna aceeai. Rolul operatorului new La folosirea operatorului new se ntmpl mai multe lucruri: se creeaz o nou instan a clasei date, se aloc memorie pentru aceasta i se apeleaz o metod special a clasei. Aceast metod special se numete constructor. Definie 1. Constructorii reprezint metode speciale pentru crearea i iniializarea noilor instane ale claselor. Constructorii iniializeaz noul obiect i variabilele sale, creeaz orice alte obiecte de care are nevoie obiectul creat i realizeaz orice alte operaii de care obiectul are nevoie la iniializarea sa. ntr-o clasa pot exista mai multe definiii de constructori, fiecare avnd un numr diferit de argumente sau de tipuri. Gestionarea memoriei Gestionarea memoriei n Java se face dinamic i automat. Atunci cnd creai un obiect nou, Java aloc automat o zon de memorie de dimensiunea corespunztoare obiectului. Nu trebuie alocat memorie explicit. Java se ocup de asta n locul vostru. In momentul n care s-a terminat lucrul cu un obiect, acesta nu mai posed nicio referin activ ctre el (nu va mai fi atribuit nici unei variabile folosite, nu va mai fi stocat ntr-un tablou). Java posed un gunoier (garbage collector) care caut obiectele nefolosite i recupereaz memoria ocupat de acestea. Accesarea i stabilirea variabilelor de clas i de instan Variabilele de clas i cele de instan se comport la fel ca variabilele locale. Trebuie doar referite ntr-o modalitate uor diferit fa de celelalte variabile. Obinerea valorilor Pentru a obine valoarea unei variabile de instan se folosete notaia cu punct. Variabila de clas sau de instan este format din dou pri: obiectul, n partea stng a punctului, i variabila, n partea dreapt a punctului.

smaranda.belciug@inf.ucv.ro Exemplu: Daca avei un obiect atribuit variabilei clientulMeu, i acel obiect posed o variabil denumit totalFacturat, v vei referi la acea variabil n felul urmtor: clientulMeu.totalFacturat; sau clientulMeu.totalFacturat.rezervat; Modificarea valorilor clientulMeu.totalFacturat.rezervat = true; Exemplu. Programul de mai jos testeaz i modific variabilele de instan ale unui obiect Point. Point este un obiect care face parte din pachetul java.awt i care definete un punct n coordonatele x, y.
import java.awt.Point; class DefPuncte{ public static void main(String args[]){ Point pozitie = new Point(4,13); System.out.println("Pozitia de inceput: "); System.out.println("X egal "+ pozitie.x); System.out.println("Y egal " + pozitie.y); System.out.println("\nSe muta n (7,6)"); pozitie.x = 7; pozitie.y = 6; System.out.println("Pozitia finala: "); System.out.println("X egal "+ pozitie.x); System.out.println("Y egal " + pozitie.y); }//end main }//end class Pozitia de inceput: X egal 4 Y egal 13 Se muta n (7,6) Pozitia finala: X egal 7 Y egal 6

Variabile de clas Variabilele de clas sunt variabile care sunt definite i memorate chiar n clas. Valorile lor se aplic clasei i tuturor instanelor sale. n cazul variabilelor de instan, fiecare nou instan a clasei primea o copie a variabilelor de instan definite n clas. Fiecare instan poate apoi modifica valorile acestor variabile de instan, fr afecta alte instane. n cazul variabilelor de clas, exist o singur copie a variabilei. Modificare valorii variabilei este vizibil n toate intanele clasei.

smaranda.belciug@inf.ucv.ro

Variabilele de clas se definesc prin inserarea cuvntului cheie static naintea numelui variabilei. class MembruFamilie{ static String numeFamilie = Popa; String prenume; int varsta; } Instantele clasei MembruFamilie poseda propriile valori pentru prenume i vrst, dar pentru variabila de clas numeFamilie are o valoare comun pentru toi membrii familiei. Daca se modifica valoarea numeFamiliei, toate instanele clasei MembruFamilie vor fi afectate. Pentru a accesa variabilele de clasa se folosete tot punctul. MembruFamilie tata = new MembruFamilie(); System.out.println(Numele de familie este: + tata.numeFamilie); System.out.println(Numele de familie este: + MembruFamilie.numeFamilie); Este de preferat sa se foloseasc numele de clas atunci cnd se acceseaz o variabil de clas. Apelarea metodelor Apelarea metodelor este foarte similar cu referirea variabilelor de instan, se folosete notaia punct. clientulMeu.adaugaInFactura(codProdus, pret, cantitate); Atenie! Toate metodele trebuie s fie urmate de paranteze, chiar dac nu este nevoie de argumente. clientulMeu.anuleazaToateComenzile(); Exemplu:
class VerificareSir{ public static void main(String argumente[]){ String str = "In viata mea urmatoare, voi crede in reincarnare"; System.out.println("Sirul este: " + str); System.out.println("Lungimea acestui sir: " + str.length()); System.out.println("Caracterul din pozitia 7: " + str.charAt(7)); System.out.println("Subsirul de la 9 la 11: " + str.substring(9,11));

smaranda.belciug@inf.ucv.ro
System.out.println("Indexul caracterului u: " + str.indexOf('u')); System.out.println("Indexul inceputului " + "subsirul \"voi\":" + str.indexOf("voi")); System.out.println("Sirul scris cu litere mari: " + str.toUpperCase()); }//end main }//end class Sirul este: In viata mea urmatoare, voi crede in reincarnare Lungimea acestui sir: 48 Caracterul din pozitia 7: a Subsirul de la 9 la 11: me Indexul caracterului u: 13 Indexul inceputului subsirul "voi":24 Sirul scris cu litere mari: IN VIATA MEA URMATOARE, VOI CREDE IN REINCARNARE

Metode de clas Metodele de clas, ca i variabilele de clas, se aplic unei clase n ntregul su i nu instanelor sale. Metodele de clas sunt utilizate de obicei drept metode de uz general, care nu pot opera direct asupra unei instane a clasei, dar se potrivesc conceptual n cadrul clasei. Exemplu: metoda de clas Math.max(). Referine la obiecte Definiie 2. O referin este un tip de pointer folosit pentru a indica valoarea unui obiect. Atunci cnd atribuii un obiect unei variabile sau transmitei un obiect ca argument pentru o metod, nu folosii de fapt obiecte. Nu folosii nici mcar copii ale obiectului. De fapt folosii referine ctre acele obiecte.
import java.awt.Point; class TestReferinte { public static void main(String args[]){ Point pt1, pt2; pt1 = new Point(100,100); pt2 = pt1; pt1.x = 200; pt1.y = 200; System.out.println("Punct1: " + pt1.x + " " + pt1.y); System.out.println("Punct2: " + pt2.x + " " + pt2.y); }//end main }//end class Punct1: 200 200

smaranda.belciug@inf.ucv.ro
Punct2: 200 200

Explicaii. n prima parte a programului s-au ntmplat urmtoarele: Linia 5: s-au creat dou variabile Point Linia 7: variabilei pt1 i se atribuie un nou obiect Point Linia 8: valoarea variabilei pt1 i se atribuie variabilei pt2 Liniile 10-14 sunt cele care conin pcleala. Variabilele x i y ale lui pt1 sunt setate ambele la 200, apoi sunt afiate pe ecran valorile lui x i y pentru pt1, respectiv pt2. Probabil era de asteptat ca valorile sa fie diferite pentru pt1 i pt2, Motivul pentru care sunt egale este c n linia 7 s-a creat o referin de la pt2 la pt1, n loc s se creeze pt2 ca un nou obiect, copiat din pt1. pt2 este o referinta la acelasi obiect ca si pt1. Dac se dorea ca pt1 si pt2 sa refere obiecte separate atunci trebuia folosit: pt1 = new Point(100, 100); pt2 = new Point(100, 100); Casting-ul i conversia obiectelor i a tipurilor primitive Definiie 3. Casting-ul reprezint procesul de generare a unei noi valori de un alt tip dect sursa. Atunci cnd efectuai un cast, valoarea variabilei nu se schimba; de fapt se creeaz o nou variabil de tipul dorit. Exist trei tipuri de casting: Casting-ul ntre tipuri primitive, cum ar fi int n float, sau float n double; Casting-ul ntre o instan a unei clase i o instan a altei clase Conversia tipurilor primitive n obiecte i apoi extragerea valorilor primitive din aceste obiecte Trebuie discutat in termeni de surs i destinaie. Sursa reprezint variabila ce va fi convertit ntr-un alt tip, destinaia este rezultatul. Casting-ul ntre tipuri primitive (numetip)valoare int (x/y)

smaranda.belciug@inf.ucv.ro Casting-ul obiectelor Intanelor claselor li se poate aplica operaia de cast ctre instane ale altor clase, cu o singur condiie: clasele surs i destinaie trebuie s fie nrudite prin motenire. O clas trebuie s fie subclas a alteia. Pentru a folosi o superclas acolo unde se ateapt obiecte subclas, trebuie s facei cast explicit. Nu se vor pierde informaii prin cast, dar se ctig toate metodele i variabilele pe care le definete subclasa. (numeclasa)obiect Exemplu. Angajat ang = new Angajat(); VicePresedinte vip = new VicePresedinte(); ang = vip; // nu este nevoide de cast de jos in sus vip = (VicePresedinte)ang; // este nevoie de cast explicit Conversia tipurilor primitive n obiecte i invers Integer numarDate = new Integer(4403); int numarNou = numarDate.intValue(); //returneaza 4403 String pennsylvania = 65000; int penn = Integer.parseInt(pennsylvania);

Compararea obiectelor S presupunem c avei dou obiecte String diferite care s aib aceeai valoare. Dac la compararea lor folosim operatorul == pentru a compara aceste obiecte ele vor fi considerate diferite. Se va folosi o metod special equals();
class TestDeEgalitate { public static void main(String args[]){ String str1, str2; str1 = "Test de egalitate intre siruri."; str2 = str1; System.out.println("Sir1: " + str1); System.out.println("Sir2: " + str2); System.out.println("Acelasi obiect? " + (str1 == str2)); str2 = new String(str1); System.out.println("Sir1: " System.out.println("Sir2: " System.out.println("Acelasi System.out.println("Sir1: " System.out.println("Sir2: " + str1); + str2); obiect? " + (str1 == str2)); + str1); + str2);

smaranda.belciug@inf.ucv.ro
System.out.println("Acelasi obiect? " + str1.equals(str2)); }//end main }//end class Sir1: Test de egalitate Sir2: Test de egalitate Acelasi obiect? true Sir1: Test de egalitate Sir2: Test de egalitate Acelasi obiect? false Sir1: Test de egalitate Sir2: Test de egalitate Acelasi obiect? True intre siruri. intre siruri. intre siruri. intre siruri. intre siruri. intre siruri.

Determinarea clasei unui obiect String nume = obj.getClass.getName(); peste-sabie instanceof String; //true Point pt = new Point(10,10); pt instanceof String; false Inspecia claselor i a metodelor prin reflexie Reflexia permite unei clase Java sa afle detalii despre orice alt clas. Prin reflexie, un program Java poate ncrca o clas despre care nu tie nimic, s afle despre variabilele, metodele i constructorii clasei i apoi s lucreze cu ele.
import java.lang.reflect.*; import java.util.Random; class AflaMetode { public static void main(String args[]){ Random rd = new Random(); Class numeClasa = rd.getClass(); Method[] metode = numeClasa.getMethods(); for(int i = 0; i < metode.length; i++){ System.out.println("Metoda: " + metode[i]); }//end for i }//end main }//end class

Metoda: public int java.util.Random.nextInt(int) Metoda: public int java.util.Random.nextInt() Metoda: public long java.util.Random.nextLong() Metoda: public double java.util.Random.nextDouble() Metoda: public boolean java.util.Random.nextBoolean() Metoda: public void java.util.Random.nextBytes(byte[]) Metoda: public float java.util.Random.nextFloat() Metoda: public synchronized double java.util.Random.nextGaussian() Metoda: public synchronized void java.util.Random.setSeed(long) Metoda: public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException Metoda: public final void java.lang.Object.wait() throws java.lang.InterruptedException

smaranda.belciug@inf.ucv.ro
Metoda: public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException Metoda: public boolean java.lang.Object.equals(java.lang.Object) Metoda: public java.lang.String java.lang.Object.toString() Metoda: public native int java.lang.Object.hashCode() Metoda: public final native java.lang.Class java.lang.Object.getClass() Metoda: public final native void java.lang.Object.notify() Metoda: public final native void java.lang.Object.notifyAll()

Liste, condiii i cicluri Tablouri Java implementeaz tablourile n mod diferit fat de alte limbaje drept obiect care pot fi tratate ca oricare altele. Pentru a crea un tablou n Java, se procedeaz astfel: 1. Declarai o variabil care s refere un tablou. 2. Creai un nou obiect de tip tablou i atribuii-l variabilei tablou 3. Stocai informaia n tabloul respectiv Declararea variabilei tablou String cuvinteDificile[]; String[] cuvinteDificile; Point lovituri[]; Point[] lovituri; int donatii[]; int[] donatii; Crearea obiectelor tablou - se folosete operatorul new sau - se initializeaz direct coninutul tabloului String[] numeJucatori = new String[10]; int[] temp = new int[99]; String[] chili = {jalapeno, anaheim, serrano, habanero, thai}; Cnd creai un obiect tablou folosind operatorul new, toate poziiile sale vor fi iniializate automat (0 pentru cele numerice, false pentru boolean, \0 pentru tablouri tip caracter i null pentru obiecte). Atenie! Cuvntul cheie null refer un obiect null (i poate fi folosit pentru orice referin a unui obiect). Nu este echivalent cu zero sau cu caracterul \0, aa cum este constanta NULL din C.

smaranda.belciug@inf.ucv.ro Accesarea elementelor tablourilor scorParticipant[40] = 470; Un tablou cu 10 elemente poate fi accesat folosind poziiile de la 0 la 9, nu i de la 1 la 10. Modificarea elementelor tablourilor noteleMele[4] = 5; propozitia[0] = Acum; propozitia[10] = propozitia[0]; Exemplu.
class TestTablou{ String[] prenume = {"Dennis","Grace","Bjarne","James"}; String[] numeDeFamilie = new String[prenume.length]; void afiseazaNume(){ int i = 0; System.out.println(prenume[i] i++; System.out.println(prenume[i] i++; System.out.println(prenume[i] i++; System.out.println(prenume[i] }//end afiseazaNume

+ " " + numeDeFamilie[i]); + " " + numeDeFamilie[i]); + " " + numeDeFamilie[i]); + " " + numeDeFamilie[i]);

public static void main(String args[]){ TestTablou a = new TestTablou(); a.afiseazaNume(); System.out.println("____"); a.numeDeFamilie[0] = "Ritchie"; a.numeDeFamilie[1] = "Hopper"; a.numeDeFamilie[2] = "Stroustrup"; a.numeDeFamilie[3] = "Gosling"; a.afiseazaNume(); } }//end class Dennis null Grace null Bjarne null James null ____ Dennis Ritchie Grace Hopper Bjarne Stroustrup James Gosling

Numele care au fost introduse nu sunt alese aleator, ci sunt principalii autori ai C, C++, COBOL i Java.

smaranda.belciug@inf.ucv.ro Tablouri multidimensionale Java nu suport tablourile multidimensionale, ns obine acelai efect prin declararea unui tablou de tablouri. Acele tablouri pot conine i ele tablouri i aa mai departe, pn cnd este obinut numrul de dimensiuni dorit. int[][] coordonate = new int[12][12]; coordonate[0][0] = 1; coordonate[0][1] = 2; Instruciuni bloc Instruciunile n Java sunt grupate n blocuri. Un bloc ncepe cu { i se ncheie cu }. Un lucru important de reinut referitor la blocuri este acela c se creeaz un domeniu de vizibilitate (scope) pentru variabilele locale create n cadrul blocului. Definiie 4. Domeniul de vizibilitate (scope) este un termen folosit n programare pentru a denumi acea parte a programului n care o variabil exist i poate fi folosit. Dac programul prsete domeniul de vizibilitate al unei variabile, aceasta nu mai exist i ncercarea de a o accesa va da natere unei erori. Domeniul de vizibilitate al unei variabile este blocul n care a fost creat. void testBloc(){ int x = 10; { //inceputul blocului int y = 40; y = y + x; } // sfritul blocului } Instruciuni condiionale if Definiie 5. O instruciune condiional reprezint o instruciune executat doar n cazul ndeplinirii unei anumite condiii. Diferena dintre instruciunile condiionale if n Java i cele din C sau C++ este aceea c n Java trebuie s returneaze o variabil boolean (true sau false). n C, testul poate returna un ntreg. Exemplu.
class TestParitate{ void verificareParitate(int val){ System.out.println("Valoarea este " + val + "."); if (val % 2 == 0) System.out.println("Par!"); }//end verificare Paritate

smaranda.belciug@inf.ucv.ro

public static void main(String args[]){ TestParitate e = new TestParitate(); e.verificareParitate(1); e.verificareParitate(2); e.verificareParitate(54); e.verificareParitate(77); e.verificareParitate(1346); }//end main }//end class Valoarea Valoarea Par! Valoarea Par! Valoarea Valoarea Par! este 1. este 2. este 54. este 77. este 1346.

Operatorul condiional Alt alternativ este folosirea ntr-o instruciune condiional, n locul cuvintelor cheie if i else, a operatorului condiional, denumit i uneori operator ternar. Operatorul condiional este denumit operator ternar deoarece are trei termeni. test ? rezultat_adevarat : rezultat_fals; int celMaiBunScor = scorulMeu > scorulTau ? scorulMeu: scorulTau;

int celMaiBunScor; if (scorulMeu > scorulTau) celMaiBunScor = scorulMeu; else celMaiBunScor = scorulTau; Instruciuni condiionale switch Implementarea Java a instruciunii switch este limitat testele i valorile pot fi doar tipuri primitive simple care pot fi convertite n int. ntr-o asemenea instruciune nu se pot folosi tipuri primitive de dimensiuni mai mari, cum ar fi large sau float, iruri sau alte obiecte, i nici nu se pot testa alte relaii n afar de cea de egalitate. Intr-o instruciune case putei pune oricte instruciuni fr a folosi acolade. Exemplu.
class CititorNumere{

smaranda.belciug@inf.ucv.ro
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 " "; }//end switch }//end conversieNumar public static void main(String args[]){ CititorNumere n = new CititorNumere(); String num = n.conversieNumar(4) + n.conversieNumar(1) + n.conversieNumar(3); System.out.println("413 este convertit in " + num); }//void main }//end class 413 este convertit in patru unu trei

Ciclul for for (initializare; test; incrementare){ instructiune; }

class CicluNume{ String[] prenume = {"Dennis","Grace","Bjarne","James"}; String[] numeDeFamilie = new String[prenume.length]; void afiseazaNume(){ for (int i = 0; i < prenume.length; i++) System.out.println(prenume[i] + " " + numeDeFamilie[i]); }//end afiseazaNume public static void main(String arg[]){ CicluNume a = new CicluNume(); a.afiseazaNume(); System.out.println("____"); a.numeDeFamilie[0] = "Ritchie"; a.numeDeFamilie[1] = "Hopper"; a.numeDeFamilie[2] = "Stroustrup"; a.numeDeFamilie[3] = "Gosling"; a.afiseazaNume(); }//end main }//end class Dennis null Grace null

smaranda.belciug@inf.ucv.ro
Bjarne null James null ____ Dennis Ritchie Grace Hopper Bjarne Stroustrup James Gosling

Cicluri while i do Cicluri while i do sunt identice cu cele din C i C++, cu excepia faptului c testul trebuie s foloseasc o condiie boolean.
class CopieTablouWhile{ public static void main(String args[]){ 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] + " "); }//end for i System.out.println("]"); System.out.print("tablou2: ["); int index = 0; while (index <tablou1.length && tablou1[index] != 1){ tablou2[index] = (float)tablou1[index]; System.out.print(tablou2[index++] + " "); }//end while System.out.println("]"); }//end main }//end class tablou1: [7 4 8 1 4 1 4 ] tablou2: [7.0 4.0 8.0 ]

Ciclul do while
class TestDo{ public static void main(String args[]){ int x = 1; do{ System.out.println("Cicluri, runda " + x); x++; }while(x <= 10); }//end main }//end class Cicluri, Cicluri, Cicluri, Cicluri, Cicluri, Cicluri, Cicluri, runda runda runda runda runda runda runda 1 2 3 4 5 6 7

smaranda.belciug@inf.ucv.ro
Cicluri, runda 8 Cicluri, runda 9 Cicluri, runda 10

Ieirea forat din cicluri Pentru ieirea brusc din cicluri se folosesc cuvintele cheie break i continue. int index = 0; while (index < tablou1.length){ if (tablou1[index] == 1) break; tablou2[index] = (float) tablou1[index++]; } Cuvntul cheie continue ncepe ciclul de la o nou iteraie. Pentru ciclurile do i while aceasta nseamn c se ncepe din nou cu execuia corpului ciclului; pentru ciclurile for, se evalueaz expresia de incrementare i apoi se execut blocul de instruciuni. int index = 0; int index2 = 0; while (index++ <= tablou1.length) { if (tablou1[index] == 1) continue; tablou2[index2++] = (float)tablou1[index]; } Cicluri etichetate Instruciunile break i continue pot avea etichete opionale care s indice locul de unde se va continua execuia programului. Fr etichet, break sare n afara celui mai apropiat ciclu sau la urmtoare instruciune aflat dup ciclu. Instruciunea continue sare la urmtoare iteraie a ciclului care o conine. Cu ajutorul etichetelor, putei folosi break pentru a sri ntr-un punct aflat n afara unui ciclu imbricat sau continue pentru a sri ntr-un ciclu aflat n afara ciclului curent. Exemplu.
class TestEticheta { public static void main(String args[]){ acestCiclu: for (int i = 1; i <= 5; i++) for(int j = 1; j <= 3; j++){ System.out.println("i este " + i + " ,j este " +j); if ((i + j) > 4) break acestCiclu; }//end for j System.out.println("sfarsitul ciclurilor");

smaranda.belciug@inf.ucv.ro
}//end class }//end class i este 1 ,j este 1 i este 1 ,j este 2 i este 1 ,j este 3 i este 2 ,j este 1 i este 2 ,j este 2 i este 2 ,j este 3 sfarsitul ciclurilor

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