Sunteți pe pagina 1din 40

1.

Urmtorul program pune in eviden creearea unor instane pentru o clas:


class Exemplu { int x; //constructor implicit Exemplu() {System.out.println("constructor implicit");} //constructor explicit Exemplu(int x){this.x=x;} //instanta creata explicit la momentul initializarii clasei static Exemplu primulX=new Exemplu(1); //metoda de actualizatr a campului x pentru obiectul curent public void setX(int x) {this.x=x;} //metosa necesara pentru afisarea explicita a unei instante din clasa Exemplu public String toString(){ return"x= "+x; } }//sfarsitul def clasei Exemplu class DiferiteInstante{ public static void main(String args[]){ System.out.println("primulX: " + Exemplu.primulX); //apelul constructorului implicit Exemplu obiectDoi=null; //creare explicita folosind newInstance() try{ obiectDoi=(Exemplu)Class.forName("Exemplu").newInstance(); }catch(Exception e) { System.out.println(e);} System.out.println("obiectDoi: " + obiectDoi); obiectDoi.setX(2); System.out.println("obiectDoi: "+obiectDoi); //creare unui obiect folosind operatorul new Exemplu obiectTrei=new Exemplu(3); System.out.println("obiecttrei: "+obiectTrei); } }

Date iesire: primulX: x=1 | constructor implicit | obiectDoi: x=0 | obiectDoi: x=2 | obiectDoi: x=3. Captur:

2) Programul de mai jos pune n eviden utilizarea tipurilor de date in Java:

import java.util.Random; import java.io.*; class Zaruri{ public static void main(String args[]) { //instantieri Random r=new Random(); int[] zar=new int[2]; for(int k=0;k<10;k++){ for(int i=0;i<2;i++){ zar[i]=(int)(r.nextDouble()*6)+1; } System.out.println("\nZarurile sunt: " +zar[0]+" " + zar[1]); if(zar[0]==zar[1]) System.out.println("Ati castigat! Zarurile sunt " + "egale!"); else System.out.println("Ati pierdut! Zarurile nu sunt" + "egale!"); //asteptam apasarea tastei ENTER System.out.print("Apasati tasta ENTER pentru a" + "continua..."); try{ //citim un caracter de la tastatura System.in.read(); //eliminam celelalate caractere citite System.in.skip(System.in.available()); }catch(IOException e) {System.out.println(e);} } System.out.println("Aplicatia s-a teminat!"); } }

Aplicati are ca date de iesire doua numere aleatoare. Captura

3) Programul de mai jos va scoate in evidenta aparitia unei exceptii aritmetice:

class ExceptiiNumerice{ public static void main (String args[]) { int a=3, b=0; try{ System.out.println("a/b= "+a/b); }catch(ArithmeticException e){ System.out.println("Nu este permisa impartirea la zero:" +e.getMessage()); } } }

Date de intrare: a=3; b=0. Date de iesire: "nu este permisa impartirea la 0/by0" Captura:

4) Program Java care pune n evidenta domeniul variabilelor:


class DeclaratiiVariabileLocale{ static int x=6; public static void main (String[] args){ System.out.println("x="+x); int x=(x=3)*4; System.out.println("x="+x); } }

Date de intrare: x=6; x=3. Date de iesire: x=12.

5) Programul Java de mai jos pune n evidenta comportarea conversiilor la capetele" domeniului tipului float:
public class ConversiiExpliciteFlotante{ public static void main(String[] args){ float min=Float.NEGATIVE_INFINITY; float max=Float.POSITIVE_INFINITY; System.out.println("long:"+(long)min+""+(long)max); System.out.println("int:"+(int)min+""+(int)max); System.out.println("char:"+(int)(char)min+""+(int)(char)max); System.out.println("short:"+(short)min+""+(short)max); System.out.println("byte:"+(byte)min+""+(byte)max); } }

Date de iesire: long:-92233720368547758089223372036854775807 int:-21474836482147483647 char:065535


short:0-1 byte:0-1 Captura:

6) Program care citeste un numar arbitrar de numere n virgula flotanta de la tastatura, apoi afiseaza suma acestora:
import java.io.*; public class DoWhile{ public static void main(String[] args){ BufferedReader tastatura=new BufferedReader(new InputStreamReader(System.in),1); double suma=0.0,numarCitit=0.0; String linie=""; do{ try{ System.out.println("Dati un nr in virgula flotanta"); linie=tastatura.readLine(); Double tempDouble=Double.valueOf(linie); numarCitit=tempDouble.doubleValue(); System.out.println("numarCitit="+numarCitit); suma+=numarCitit; System.out.println("Doriti sa continuati(d/n)?"); System.out.flush(); linie=tastatura.readLine(); System.out.println("Ati tastat "+linie); } catch(IOException e){ System.out.println("Intrare de la tastatura"+e.toString()); System.exit(1); } } while(linie.equals("d")||linie.equals("D")); System.out.println("Suma numerelor citite este"+suma); try{ tastatura.close(); } catch(IOException e){ System.out.println("Eroare inchidere fisier de intrare"+e.toString()); System.exit(2); } }//sfarsitul metodei main() }//sfarsitul definitiei clasei DoWhile

Date de intrare: numarCitit=2.3, numarCitit=45.566 Date de iesire: Suma numerelor citite este47.866

Captura:

7) Programul de mai jos, la unele executii, programul de mai sus va afisa: "S-a executat break eticheta. ." iar la altele:"Nu s-a executat break eticheta "
public class BreakIf{ public static void main(String args[]){ boolean b=false; eticheta:if ((int)(Math.random() * 2)==0){ b=true; break eticheta; } if(b) System.out.println("S-a executat break eticheta."); else System.out.println("Nu s-a executatreak eticheta."); } }

Captura:

8) Programul va descrie o metoda care poate arunca exceptii utiliznd instructiunea throw:
import java.io.*; public class TestExceptii{ public static void main(String args[]){ for(int i=0;i<2;i++){ try{ System.out.println("\nTest caz"+i); metoda1(i); System.out.println("Sfarsit caz"+i); } catch(Exception e){ System.out.println("Exceptie:"+e.getMessage()); } finally{ System.out.println("Executam finally!"); } }

} private static void metoda1(int i) throws Exception{ System.out.println("Incepe metoda1:"); if(i!=0) throw new Exception("din metoda1"); System.out.println("Sfarsit metoda1."); } }//sfarsitul definitiei clasei TestExceptii

Date iesire: "Test caz0 Incepe metoda1: Sfarsit metoda1. Sfarsit caz0 Executam finally! Test caz1 Incepe metoda1: Exceptie:din metoda1 Executam finally! " Captura:

9) Problema pune n evidenta un exemplu simplu de nchidere a unei resurse (un obiect al clasei respective):
public class InstructiuneaSynchronized{ public static void main(String[] args){ InstructiuneaSynchronized is=new InstructiuneaSynchronized(); synchronized(is){ synchronized(is){ System.out.println("Acum obiectul is este inchis de "+" doua ori!"); } System.out.println("Acum obiectul is este inchis o data!"); } System.out.println("Acum obiectul is nu mai este inchis!"); } } DATE IESIRE : "Acum obiectul is este inchis de doua ori! Acum obiectul is este inchis o data! Acum obiectul is nu mai este inchis! "

Captura:

10) Program Java care compara aruncarea propriilor exceptii fata de exceptiile sistem (RuntimeException): class ExceptiaNoastra extends Exception{ ExceptiaNoastra(){} ExceptiaNoastra(String s){super(s);} } public class Exceptie{ static void f()throws ExceptiaNoastra{ throw new ExceptiaNoastra(); } public static void main(String[] args){ try{ f(); } catch(RuntimeException re){ System.out.println("S-a aruncat exceptia:"+re); } catch(ExceptiaNoastra en){ System.out.println("S-a aruncat exceptia:"+en); } } } Captura:

11) class Exemplu{ public static void main(String args[]){ int x=(int)(Math.random()*5); int y=(int)(Math.random()*10); int[]z=new int[5]; try{ System.out.println("y/x="+(y/x)); System.out.println("y="+y+"z[y]="+z[y]); } catch(ArithmeticException e){ System.out.println("Problema aritmetica:"+e); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("Depasire de domeniu index vector"+e); } } } Captura:

12) class ExceptiaNoastra extends Exception{ ExceptiaNoastra(){} ExceptiaNoastra(String s){super(s);} } public class ExceptieFinally{ static void f() throws ExceptiaNoastra{ throw new NullPointerException(); } public static void main(String[] args){ try{ f(); } catch(ExceptiaNoastra re){ System.out.println("S-a aruncat exceptia:"+re); } finally{ System.out.println("Exceptie neprinsa"); } } }//sfarsitul definitiei clasei ExceptieFinally

Captura:

13) Urmatorul program pune in evidenta sase categorii de variabile care pot aparea. class CitiriIntregi { public static void main(String args[]){ int numar =0; BufferedReader in; String linie; try{ in=new BufferedReader(new InputStreamReader(System.in),1); while(true) { System.out.println("Dati numarul "+ Radical.numarDeNumere); linie=in.readLine(); try{ numar=Integer.parseInt(linie); } catch(NumberFormatException f){ System.out.println("Nu ati tastat un numar intreg");} Radical obiect =new Radical(numar); System.out.println("Radical din "+numar+" este "+obiect.radacinaPatrata()); System.out.println("Continuam? (tastati s pentru stop)"); linie=in.readLine(); if(linie.equals("s") || linie.equals("S")) break; } in.close();}catch(IOException e) { System.out.println("Citire gresita de la tastatura "+e);} } } class Radical{ static int numarDeNumere=1; int nr; Radical (int nr){ this.nr=nr; numarDeNumere++; } double radacinaPatrata(){ return Math.sqrt(nr); }}//sfarsitul definitiei clasei Radical

Date intrare: 4 si 16. Date iesire: 2, respectiv 4. Captura:

14) // definirea unei clase abstracte abstract class C1 { // declararea datelor membre int x = 1,y = 2; // declararea unei metode void f (int x) { this.x += x; g(x) ; } //declararea unei metode abstracte abstract void g(int y); } // definirea unei interfete interface I1 { public void h (); } /* definirea unei metode care deriveaza clasa C1 si implementeaza interfata I1 */ class C2 extends C1 implements I1 { int z = 10; // implementarea metodei abstracte din clasa C1 void g(int y) { this.y += y; } // implementarea metodei mostenita din interfata I1 public void h() { System.out.println("x = " + x + ", y = " + y + ", z = " + z); } } //. definirea clasei care va utiliza un obiect de tip C2 public class Testare { public static void main(String[] args) { C2 obiect = new C2(); obiect.f (4) ; obiect. g (5) ; obiect. h () ; }}

Captura:

15) Problema ce realizeaza clonarea claselor: //definirea unei clase simple care permite clonarea class ObiectSimplu implements Cloneable{ //declararea unei date membre private String content=""; public void setContent(String s){ content=s; } public String getContent(){ return content; } //supradefinirea metodei clone() public Object clone(){ try{ return super.clone(); }catch(CloneNotSupportedException e){ System.err.println("Eroare la clonare!"); return this; } } } public class Object3{ public static void main(String args[] ){ //crearea unui obiect ObiectSimplu ob1=new ObiectSimplu(); //clonarea unui obiect ObiectSimplu ob2=(ObiectSimplu) ob1.clone(); //verificarea celor doua obiecte System.out.println(ob1.equals(ob2)); System.out.println(ob1.getContent()==ob2.getContent()); //modificarea originalului ob1.setContent("Test"); //verificarea continutului celor doua obiecte System.out.println(ob1.getContent()==ob2.getContent()); } } Captura:

16) //declararea interfetei I1 interface I1{ //declararea unei date membre int x=0; //declararea unei metode(care este abstracta) public int f(); } //declararea intefetei I2 //aceasta va mosteni datele si metode4le membre din I1 interface I2 extends I1{ int y=1; public int g(); } //declararea clasei C1 class C1{ int z=2; public int h(){return z;}; } /*declararea clasei C2 care extinde clasa C1 si implementeaza interfata I2*/ class C2 extends C1 implements I2{ int t=3; //redefinirea metodelor din interfata I2 public int f(){return x;} public int g(){return y;} } public class SuperInterfete{ public static void main(String args[]){ //instantierea unui obiect din clasa C2 C2 obiect=new C2(); System.out.println("x="+obiect.f()+",y="+obiect.g() +",z="+obiect.h()+",t="+obiect.t); } } Captura:

17) Declaram un atribut static numar Instante, care va fi incrementat n constructor. La fiecare instantiere a clasei Increment, se va apela constructorul Increment numarlnstante. public class NumarareInstante{ public static void main(String args[]){ System.out.println("S-au creat"+Increment.numarInstante+"instante ale clasei Increment"); Increment a=new Increment(); System.out.println("S-au creat "+Increment.numarInstante+"instante ale clasei Increment"); } } class Increment{ static int numarInstante=0; Increment(){ numarInstante++; }; } Captura:

18) Programul de mai jos pune n evidenta realocarea memoriei pentru un obiect folosind operatorul new si metoda newlnstance () din clasa Class. class C1{ int x=10; C1(){System.out.println("Constructor fara argumente."); } C1(int x){ this.x=x; System.out.println("Constructor cu un argument."); } } public class TestDealocare{ public static void main(String args[]){ C1 obiectUnu=new C1(8); System.out.println("adresa lui obiectUnu="+obiectUnu.hashCode()); obiectUnu=new C1(6); System.out.println("adresa lui obiectUnu="+obiectUnu.hashCode()); Class oClasa=null; try{ oClasa=Class.forName("C1"); }

catch(ClassNotFoundException e){ System.out.println("Exceptie:n-am gasit clasa C1."+e); } try{ obiectUnu=(C1) oClasa.newInstance(); } catch(InstantiationException e){ System.out.println("Exceptie:nu putem instantia clasa C1."+e); } catch(IllegalAccessException e){ System.out.println("Exceptie:acces ilegal la clasa C1."+e); } System.out.println("adresa lui obiectUnu="+obiectUnu.hashCode()); } } Captura:

19) Programul de mai jos pune n evidenta o mpartire a unei clase n doua clase mai mici echivalente: public class C1{ public static void main (String args[]){ A obA=new A(1); B obB=new B(2,obA); obA=new A(1,obB); try{ obB.get().afiseaza(); obA.get().afiseaza(); } catch(NullPointerException e){ System.out.println("Eroare: " + e.getMessage()); } } } class A{ private int x; private B obiectDinB; A(int x){ this.x=x;

this.obiectDinB=null; } A(int x,B obiectDinB){ this.x=x; this.obiectDinB=obiectDinB; } B get() throws NullPointerException{ if(obiectDinB==null) throw new NullPointerException("Obiectul din B este null\n"); else return obiectDinB; } void afiseaza(){ System.out.println("x= " + x); } } class B{ private int y; private A obiectDinA; B(int y){ this.y=y; this.obiectDinA=null; } B(int y,A obiectDinA){ this.y=y; this.obiectDinA=obiectDinA; } A get() throws NullPointerException{ if(obiectDinA==null) throw new NullPointerException("Obiectul din A este null\n"); else return obiectDinA; } void afiseaza(){ System.out.println("y= " +y); } } Captura:

20) Urmatorul program Java evidentiaza suprascrierea metodelor unei interfete relativ la lista de exceptii care pot fi aruncate: class ExceptiaNoastraUnu extends Exception{ ExceptiaNoastraUnu() {super();} } class ExceptiaNoastraDoi extends Exception{ ExceptiaNoastraDoi() {super();} } interface I1{ int f(int x) throws ExceptiaNoastraUnu,ExceptiaNoastraDoi; } interface I2 extends I1{ int f(int x) throws ExceptiaNoastraDoi; } class C1 implements I1{ public int f(int x) throws ExceptiaNoastraUnu,ExceptiaNoastraDoi{ if(x<0) throw new ExceptiaNoastraUnu(); else throw new ExceptiaNoastraDoi(); } } class C2 implements I2{ public int f(int x) throws ExceptiaNoastraDoi{ if(x<0) throw new ExceptiaNoastraDoi(); return x; } } public class TestSuprascriereMetode{ public static void main(String args[]){ C1 obiectUnu=new C1(); C2 obiectDoi=new C2(); try{ System.out.println(obiectDoi.f(2)); System.out.println(obiectUnu.f(-2)); System.out.println(obiectDoi.f(-2)); System.out.println(obiectUnu.f(2)); } catch(ExceptiaNoastraUnu e){ System.out.println("A aparut o exceptie: " + e); } catch(ExceptiaNoastraDoi e){ System.out.println("A aparut o exceptie: " + e); }

}} Captura

21) Programul Java de mai jos prezinta o aplicatie n care se folosesc interfete. Avem o interfata DispozitiveElectronice, o clasa de baza Locuinta, doua clase derivate (TV si Aspirator) din clasa de baza. Fisierul de aplicatii este ntitulat AplicatieElectronice.java. import java.io.*; //fisierul DispozitiveElectronice.java interface DispozitiveElectronice{ public void setTimpFolosinta(int timp); public int getTimpFolosinta(); public int getPutere(); } //fisierul Locuinta.java abstract class Locuinta{ protected int volum=1; private boolean on; public void porneste(){ on=true; } public void opreste(){ on=false; } public abstract void schimbaVolum(int diferenta); } //fisierul TV.java class TV extends Locuinta implements DispozitiveElectronice{ private int timp=0; public void schimbaVolum(int diferenta){ volum=volum+diferenta; } public void setTimpFolosinta(int timp){ this.timp=timp; }

public int getTimpFolosinta(){ return timp; } public int getPutere(){ return 100; } public int getVolum(){ return volum; } } //fisierul Aspirator.java class Aspirator extends Locuinta implements DispozitiveElectronice{ private int timp=0; public void schimbaVolum(int diferenta){ volum=volum+diferenta; } public void setTimpFolosinta(int timp){ this.timp=timp; } public int getTimpFolosinta(){ return timp; } public int getPutere(){ return 500; } public int getVolum(){ return volum; } } //fisierul AplicatieElectronice.java public class AplicatieElectronice{ private BufferedReader tastatura; private int totalPutere;

private int timp,volum; public static void main (String args[]){ AplicatieElectronice obiect =new AplicatieElectronice(); TV tv=new TV(); obiect.citesteTimp(); tv.setTimpFolosinta(obiect.timp); tv.schimbaVolum(1); obiect.calculeazaPutereConsumata(tv); obiect.afiseaza("tv",tv.getVolum(),tv.getTimpFolosinta(),obiect.totalPutere); tv.setTimpFolosinta(0); Aspirator aspirator=new Aspirator(); obiect.citesteTimp(); aspirator.setTimpFolosinta(obiect.timp); aspirator.schimbaVolum(2); obiect.calculeazaPutereConsumata(aspirator); obiect.afiseaza("aspirator",aspirator.getVolum(),aspirator.getTimpFolosinta(),obiect.tot alPutere); aspirator.setTimpFolosinta(0); } private void citesteTimp(){ try{ tastatura=new BufferedReader(new InputStreamReader(System.in),1); System.out.println("Dati timpul(in minute): "); System.out.flush(); String linie=tastatura.readLine(); try{ timp=Integer.parseInt(linie); } catch(NumberFormatException ex){ System.err.println("Format de intreg gresit: " +ex); System.exit(3); } } catch(IOException e){ System.out.println("Intrare gresita de la tastatura : " +e); System.exit(2); } } public void afiseaza(String s, int v, int timpUtilizat, int putere){

if(s.equals("tv")){ System.out.println("TV-ul are volumul " +v); System.out.println("si a fost utilizat timp de " + timpUtilizat + " minute."); System.out.println("Puterea totala a fost " + putere); } else if(s.equals("aspirator")){ System.out.println("Aspiratorul are viteza " +v); System.out.println("si a fost utilizat timp de " + timpUtilizat + " minute. "); System.out.println("Puterea totala a fost " + putere); } } public void calculeazaPutereConsumata(DispozitiveElectronice dispozitiv){ int putere=dispozitiv.getTimpFolosinta() * dispozitiv.getPutere(); totalPutere=totalPutere + putere; } } Date de intrare: 20 si 30 minute. Date de iesire:"Puterea totala a fost de 2000 respectiv 17000" Captura:

22) Codul Java de mai jos ilustreaza transmiterea (si initializarea) tablourilor bidimensionale ca parametri: public class MatriceParametri { public static void main(String[] args) { int [][] v1 = new int [2] [3]; initializeazaUnu (v1); afiseazaMatrice(v1); int [][] v2 = { {1, 3, -4}, {4, -6, 3} }; afiseazaMatrice(v2); } static void afiseazaMatrice(int [][] a) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < a [0].length; j++)

System.out.print (a[i] [j] + " "); System.out.println(); } } static void initializeazaUnu(int [][] a){ int numarLinii = a.length; int numarColoane = a[0].length; for (int linie = 0; linie < numarLinii; linie++) for (int coloana = 0; coloana < numarColoane; coloana++) a [linie][coloana] = 1; } } Captura:

24) //clasa care contine metoda main() public class Lista{ public static void main(String args[]){ ListaInlantuita lista=new ListaInlantuita(); lista.adaugaNod(new Element(7)); lista.adaugaNod(new Element(3)); lista.adaugaNod(new Element(0)); lista.afiseazaLista(); } } //clasa corespunzatoare unui element al listei class Element{ int valoare; //date de tip int Element urmator; //legatura catre urmatorul nod Element(int valoareNod){ valoare=valoareNod; urmator=null; } } //clasa corespunzatoare listei simplu inlantuite class ListaInlantuita{ Element primul, ultimul;

int numarNoduri; ListaInlantuita (){ primul=ultimul=null; numarNoduri=0; } //adaugarea se realizeaza la sfarsitul listei void adaugaNod(Element nodNou){ nodNou.urmator=null; if(primul==null)//acesta este primul element primul=nodNou; if(ultimul!=null) ultimul.urmator=nodNou; ultimul=nodNou; numarNoduri++; } //afisarea continutului listei void afiseazaLista(){ Element temporar=primul; while(temporar!=null){ System.out.println(temporar.valoare + " "); temporar=temporar.urmator; } System.out.println(); } } Captura:

25) public class ListaGenerica{ public static void main(String args[]){ ListaInlantuitaGenerica listaIntregiStringuri=new ListaInlantuitaGenerica(); listaIntregiStringuri.adaugaNod(new Integer(7)); listaIntregiStringuri.adaugaNod(new Integer(3)); listaIntregiStringuri.adaugaNod(new Integer(0)); listaIntregiStringuri.adaugaNod(new String ("sapte")); listaIntregiStringuri.adaugaNod(new String("trei")); listaIntregiStringuri.adaugaNod(new String("zero"));

listaIntregiStringuri.afiseazaLista(); } } //clasa corespunzatoare unui element al listei class ElementGeneric{ Object valoare; //date de tip generic(Object se poate unifica cu un tip arbitrar de date in timpul executiei programului) ElementGeneric urmator; //legatura catre urmatorul nod ElementGeneric(Object valoareNod){ valoare=valoareNod; urmator=null; } } //clasa corespunzatoare listei generice simplu inlantuite class ListaInlantuitaGenerica{ ElementGeneric primul, ultimul; int numarNoduri; //constructorul clasei ListaInlantuitaGenerica(){ primul=ultimul=null; numarNoduri=0; } ///adaugarea unui nod la lista void adaugaNod(Object dateNoi){ ElementGeneric nodNou=new ElementGeneric(dateNoi); nodNou.urmator=null; if(primul==null)//acesta este primul element primul=nodNou; if(ultimul!=null) ultimul.urmator=nodNou; ultimul=nodNou; numarNoduri++; } //afisarea continutului listei void afiseazaLista(){ ElementGeneric temporar=primul; while(temporar!=null){ System.out.println(temporar.valoare + " "); temporar=temporar.urmator; } System.out.println(); }

} Captura:

26) Se citesc cuvinte din fisierul numere. txt care vor fi inserate ntr-un arbore de cautare. Se va realiza parcurgerea "acestuia n preordine, inordine si, respectiv, postordine. import java.io.*; import java.util.*; //definim clasa NodArboreBinar folosita pentru reprezentarea unui arbore binar de cautare class NodArboreBinar{ String cuvant; int contorCuvant; NodArboreBinar stanga, dreapta; //construcorul clasei NodArboreBinar(String cuvantNou){ cuvant=cuvantNou; contorCuvant=1; stanga=dreapta=null; } } //definim clasa OperatiiArboreBinar care cuprinde descrierea operatiilor principale din arbore class OperatiiArboreBinar{ NodArboreBinar radacina; //constructorul clasei OperatiiArboreBinar(){ radacina=null; } void insereazaNod(NodArboreBinar nod, String cuvantNou){ int compara=nod.cuvant.compareTo(cuvantNou); if(compara==0)//cuvantul exista deja nod.contorCuvant++; else if(compara>0)//ne ducem la stanga

else

if(nod.stanga!=null) insereazaNod(nod.stanga, cuvantNou); else nod.stanga=new NodArboreBinar(cuvantNou); //comapara<0 if(nod.dreapta!=null) insereazaNod(nod.dreapta,cuvantNou); else nod.dreapta=new NodArboreBinar(cuvantNou);

} //aceasta metoda are menirea de a separa cazul crearii radacinii de cazul inserarii unui nod ordinar void insereazaCuvant(String cuvantNou){ if(radacina==null) radacina=new NodArboreBinar(cuvantNou); else insereazaNod(radacina, cuvantNou); } //metoda cauta nodul care contine cuvantul specificat //parametrul nod indica arborele in care se realizeaza cautare NodArboreBinar gaseste(NodArboreBinar nod, String cuvantCheie){ int compara = nod.cuvant.compareTo(cuvantCheie); if(compara==0)//am gasit cuvantCheie return nod; else if(compara>0) if(nod.stanga!=null) return gaseste(nod.stanga,cuvantCheie); else return null;//nu a fost gasit cuvantCheie else ///compara <0 if(nod.dreapta!=null) return gaseste(nod.dreapta,cuvantCheie); else return null; } int cuvantContor(String cuvantCheie){ if(radacina!=null){ NodArboreBinar nod=gaseste(radacina,cuvantCheie); if(nod!=null) return nod.contorCuvant; else return 0; }

return 0;//arbore vid } void preordine(NodArboreBinar nod, StringBuffer listaPreordine){ //in lista preordine am preferat sa listam si nodurile vide in ideea refacerii //ulterioare a structurii de arbore binar.Mai precis, intre reprezentarea arborelui //si lista in preordine completa exista o corespondenta biunivoca. if(nod!=null){ String pereche = "(" +nod.cuvant + ", " + nod.contorCuvant + ")\n"; listaPreordine.append(pereche); if(nod.stanga!=null) preordine(nod.stanga, listaPreordine); else preordine(nod.stanga,listaPreordine.append("(null,0)")); if(nod.dreapta!=null) preordine(nod.dreapta,listaPreordine); else preordine(nod.dreapta, listaPreordine.append("(null,0)")); } } void inordine(NodArboreBinar nod, StringBuffer listaInordine){ if(nod!=null){ String pereche="(" + nod.cuvant +", " + nod.contorCuvant +")\n"; inordine(nod.stanga, listaInordine); listaInordine.append(pereche); inordine(nod.dreapta, listaInordine); } } void postordine(NodArboreBinar nod, StringBuffer listaPostordine){ if(nod!=null){ String pereche = "(" + nod.cuvant +" , " + nod.contorCuvant + ")\n"; postordine(nod.stanga, listaPostordine); postordine(nod.dreapta, listaPostordine); listaPostordine.append(pereche); } } }//sfarsitul clasei OperatiiArboreBinar public class cuvantArboreBinar{ public static void main(String args[]){

OperatiiArboreBinar arboreBinar=new OperatiiArboreBinar(); BufferedReader intrare; try{ intrare=new BufferedReader(new FileReader("H:/java/4.5.3/numere1.txt")); String oLinie; while ((oLinie=intrare.readLine())!=null){ StringTokenizer st= new StringTokenizer(oLinie, " ,;\"'\t\n\r"); while (st.hasMoreTokens()){ String sir= st.nextToken(); arboreBinar.insereazaCuvant(new String (sir)); } } intrare.close(); } catch(Exception e){ System.out.println("Eroare : " +e); } //probam pentru cateva cuvinte System.out.println("Numar cuvinte 'JAVA' =" + arboreBinar.cuvantContor("JAVA")); System.out.println("Numar cuvinte 'AVAJ =" + arboreBinar.cuvantContor("AVAJ")); StringBuffer listaPreordine=new StringBuffer(" "); arboreBinar.preordine(arboreBinar.radacina, listaPreordine); System.out.println("Lista in preordine (completa) este " + listaPreordine); StringBuffer listaInordine=new StringBuffer(""); arboreBinar.inordine(arboreBinar.radacina, listaInordine); System.out.println("Lista in ordine (ce corespunde cu sortarea " + " crescatoare) este " + listaInordine); StringBuffer listaPostordine=new StringBuffer (" "); arboreBinar.postordine(arboreBinar.radacina, listaPostordine); System.out.println("Lista in postordine este " + listaPostordine); } } Captura:

27) Se creeaza un vector cu informatii despre studenti. import java.util.Vector; class Student { int numarMatricol; String nume, prenume; float media; Student(int numarMatricol, String nume, String prenume, float media) { this.numarMatricol = numarMatricol; this.nume = new String(nume); this.prenume = new String(prenume); this.media = media; } public String toString () { return("NumarMatricol:" + numarMatricol + " Nume: " + nume +" Prenume: " + prenume + " Media: " + media); } } // sfrsitul clasei Student public class VectorStudenti { public static void main(String[] args) { Vector listaStudenti = new Vector(); listaStudenti .addElement (new Student (52321,"Trufanda","Viorel", 9.99f)); listaStudenti.addElement(new Student(52322, "Raicu","Florin", 8.99f)); listaStudenti.addElement(new Student(52426, "Munteanu","Loredana", 9.49f)); for (int i = 0; i < listaStudenti.size(); i++) { Student curent = (Student) listaStudenti.elementAt(i); System.out.print ("Studenta " + i + ": "); System.out.println(curent); } } } // sfrsitul clasei VectorStudenti Captura:

28) Urmatorul program pune n evidenta crearea (n caz ca nu exista deja) a directorului C : \dirProba (sub sistemul Windows): import java.io.*; public class Fisiere { public static void main(String[] args) { int i; boolean reusita; File dirNou = new File ("C :\\dirProba" ); if (dirNou.isDirectory ()) System.out.println("Directorul C:\\dirProba exista deja!"); reusita = dirNou.mkdir(); if (reusita) System.out.println("Am reusit sa cream directorul " +"C:\\dirProba"); else System.out.println("Nu am creat directorul " + "C: \\dirProba!") ; } } Captura:

29) Mai nti se va crea fisierul binar (prin acces de scriere) fisier .bin, n care sunt trei ntregi: 10000, 20000 si 30000. Apoi pozitionam pointerul la fisier dupa patru octeti (prin apelarea metodei seek()) si astfel vom nlocui 20000 cu 40000. Cu apelul metodei getFilePointer () vom verifica faptul ca o variabila' de tip int se memoreaza ntr-un fisier binar pe patru octeti. Apoi, pozitionam pointerul la fisier pe prima pozitie si citim pe rnd primii patru octeti (utiliznd o variabila de tip byte) si apoi ultimii opt octeti folosind o variabila de tip double. import java.io.*; public class FisiereAccesAleator { public static void main(String[] args) { try {

RandomAccessFile fisierUnu = new RandomAccessFile("fisier.bin", "rw"); fisierUnu.writeInt(10000); fisierUnu.writeInt(20000); fisierUnu.writeInt(30000); // vom inlocui in fisier valoarea 200Q0 cu 40000 fisierUnu.seek(4) ; fisierUnu.writeInt(40000); fisierUnu.close () ; } catch (IOException e) { System.out.println("Eroare de scriere in fisierUnu" + e.toString()) ;} try { // fisier.bin va contine valorile intregi 10000, // 40000 si 30000 RandomAccessFile fisierDoi = new RandomAccessFile("fisier.bin", "r"); // citim primul intreg int i = fisierDoi.readInt(); System.out.println("i1 = " + i + " pointer = " + fisierDoi.getFilePointer()) ; // citim al doilea intreg i = fisierDoi.readInt() ; System.out.println("i2 = " + i + " pointer = " +fisierDoi.getFilePointer()) ; // resetam pointerul catre fisierDoi la zero fisierDoi.seek(0) ; // citim patru octeti care formeaza un int byte b = fisierDoi.readByte (); // afisam octetul cel mai semnificativ System.out.println("b4 = " + b); b = fisierDoi.readByte(); System.out.println("b3 = " + b); b = fisierDoi.readByte(); System.out.println("b2 = " + b); b = fisierDoi.readByte(); // afisam octetul cel mai nesemnificativ System.out.println("bl = " + b); // citim urmatorii opt octeti si-1 interpretam ca double double d = fisierDoi.readDouble(); System.out.println("d = " + d); fisierDoi.close (); } catch (IOException es) { System.out.println("Eroare de citire din fisier " +es.toString()) ; } }

} Captura:

30) Urmatorul program pune n evidenta utilizarea claselor FileReader si LineNumberReader pentru afisarea unui fisier text, n care fiecare linie este precedata de numarul ei. import java.io.*; public class LiniiNumerotate { public static void main(String[] args) { try{ FileReader fr = new FileReader("LiniiNumerotate.java"); LineNumberReader lnr = new LineNumberReader(fr); String s; while ( (s = lnr. readLine ()) != null) { System.out.println(lnr.getLineNumber() + ": " + s); } lnr.close(); fr.close(); } catch (IOException e) { System.out.println( "A aparut o exceptie de intrare/iesire") ; } } } //Dupa cum se observa, executia acestui program va afisa codul sursa al programului de mai sus, punnd la nceputul fiecarei linii numarul ei, urmat de caracterul doua puncte si spatiu.patiu.

Captura:

31) Urmatorul program Java utilizeaza interfata Serializable: import java.io.*; import java.util.*; class CercDoi implements Serializable { protected double x, y, raza; private Vector altCerc = new Vector(); public CercDoi(double x, double y, double raza) { this.x = x; this.y = y; this.raza = raza; } public boolean punctInterior(double x, double y) { return (this.x - x) * (this.x - x) +(this.y - y)*(this.y - y)<= raza *raza; } public String toString() { return "Centrul (" + x +","+y+"), raza" + raza; } } public class TestCercDoiSerializare { public static void main(String[] args) { CercDoi obiect = new CercDoi(0,0,10); try {

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("cerc.dat") ) ; oos.writeObject(obiect); oos.close (); } catch (IOException e) { System.out.println("Eroare la serializare"); } try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("cerc.dat") ) ; CercDoi obiectCitit = (CercDoi) ois.readObject() ; System.out.println (obiectCitit); ois.close () ; } catch (IOException e) { System.out.println ("Eroare la deserializare" + e.getMessage ()); } catch (ClassNotFoundException e) { System.out.println("N-am gasit clasa obiectului in flux" + e.getMessage () ) ; } } } //Cu toate ca variabilele x, y, raza si altCerc nu sunt publice, acestea sunt accesibile fluxurilor obiect. Clasa Vector este serializabila, deci toate elementele sale vor fi transmise cu succes. Metoda readObject () returneaza un Object si deci trebuie realizat downcasting prin specificarea numelui clasei obiectului citit. La executia programului de mai sus se va afisa; | Centrul (0.0, 0.0), raza 10.0 Captura:

32) Putem crea mai multe fire de executie, ba chiar si cu nume. public class AlDoileaFir { public static void main(String[] args) { FirExecutie fir1 = new FirExecutie("FIR1"); FirExecutie fir2 = new FirExecutie("FIR2"); System.out.println("JVM va crea contextul celor doua fire de executie!"); fir1.start(); fir2.start(); System.out.println("JVM a creat contextul celor doua fire de executie!"); } }

class FirExecutie extends Thread{ private String numeFir; public FirExecutie(String nume){ numeFir = nume; } public void run() { int numarPasi = 5; System.out.println("Run se executa de " + numarPasi +"ori."); for (int i = 1; i <= numarPasi; i++) { System.out.println(numeFir + " este la pasul " + i); try { sleep(500); } catch (InterruptedException e) { System.err.println("Eroare in somn"); } } System.out.println(numeFir + " si-a terminat treaba"); }} Captura:

33) Un exemplu simplu de utilizare a interfetei Runnable: public class PrimulRunnable { public static void main(String[] args) { System.out.println("Crearea obiectului runnable"); Tinta tinta = new Tinta (); System.out.println("Cream firul de executie"); Thread fir = new Thread(tinta); System.out.println("Startam firul de executie"); fir.start (); System. out .println ("Revenim in main()"); } }

class Afisare { public void afisare(String mesaj){ System. out .println (mesaj) ; } } /** clasa corespunzatoare firelor de executie */ class Tinta extends Afisare implements Runnable { public void run() { int numarPasi = 5; afisare("Run se executa de " + numarPasi + " ori."); for (int i = 1; 1 <= numarPasi;i++) afisare ("Pasul " + i); afisare("Run si-a terminat treaba"); } } Captura:

34) import java.applet.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class InfoURL extends Applet implements ActionListener{ //datele membre URL url; String sirURL; Button afiseaza; TextField numeCamp; //metoda de initializare public void init(){ //crearea unui buton afiseaza=new Button("Dati adresa url: "); add(afiseaza); afiseaza.addActionListener(this); //crearea unui camp de text numeCamp=new TextField(60); add(numeCamp); } //implementarea metodei din interfata ActionListener public void actionPerformed(ActionEvent event){ //preluam url introdus in campul text

sirURL=numeCamp.getText(); try{ //instantiem un obiect de tip URL url=new URL(sirURL); //obtinem numele fisierului String numeFisier=url.getFile(); System.out.println("Numele fisierului este: " +numeFisier); //obtinem numele masinii gazda String numeHost=url.getHost(); System.out.println("Numele host-ului este: " +numeHost); //obtinem numele portului int numarPort=url.getPort(); System.out.println("Numarul portului este: " +numarPort); //obtinem numele protocolului String numeProtocol=url.getProtocol(); System.out.println("Numele protocolului este : "+ numeProtocol); //extragem referinta(ancora) String numeReferinta=url.getRef(); System.out.println("Numele referintei este : "+numeReferinta); } catch(MalformedURLException e){ //tratarea exceptiei System.err.println("Eroare : " +e.getMessage()); } } } 35) Programul Java de mai jos citeste de la tastatura o adresa URL si afiseaza continutul fisierului pe ecran. Aplicatia permite doar afisarea documentelor de tip text. import java.io.*; import java.net.*; public class ContinutTextURL { /** declararea datelor membre */ private BufferedReader tastatura, fluxIntrare; /** metoda principala */ public static void main(String[] args) { ContinutTextURL continut = new ContinutTextURL(); continut.afisare (); } /** metoda pentru afisarea continutului de la adrtsa data de URL */ private void afisare() { /** declararea variabilelor locale */ String sirURL = "";

String linie = ""; /** obtinerea unui flux de la tastatura */ tastatura = new BufferedReader(new InputStreamReader(System.in), 1); try { /** obtinerea adresei URL de la tastatura */ sirURL = prompt("Dati o adresa URL (ex.: " +"http://www.infoiasi.ro/):"); /** obtinerea unei instante a clasei URL */ URL adresaURL = new URL(sirURL) ; /** crearea unei conexiuni */ URLConnection conexiune = adresaURL.openConnection(); /** obtinerea unui flux pentru citirea continutului-resursei */ fluxIntrare = new BufferedReader(new InputStreamReader(conexiune.getInputStream())); /** cat timp putem citi cate o linie, o afisam la consola* */ while ((linie = fluxIntrare.readLine()) != null) { System.out.println(linie) ; } }/** tratarea exceptiilor */ catch (MalformedURLException e) { System.err.println("URL gresit:"+ sirURL + "\n" + e); System.exit(2); } catch (IOException e) { System.err.println("Eroare la stabilirea conexiunii: " + e); System.exit(1); } } /** metoda pentru citirea unei linii de la tastatura */ private String prompt(String mesaj) { String raspuns = ""; try { /** afisarea unui mesaj */ System.out.print(mesaj) ; /** golirea fluxului de iesire */ System.out.flush(); /** citirea unei linii de la tastatura */ raspuns = tastatura.readLine() ; } catch (IOException e) { System.err.println("Eroare la citirea de la tastatura:"+ e) ; System.exit (2); } /**intoarcerea rezultatului */ return raspuns; } }

Captura:

36) Sa se determine distanta euclidina dintre 2 puncte ale caror coordonate se dau in linia de comanda sub forma a 4 numere: importjava.io.*; import java.util.*; import java.text.*; public class Distanta { public static void main(String a[]) throws Exception { NumberFormat f=new DecimalFormat("##0.00"); double x1=Double.parseDouble(a[0]); double y1=Double.parseDouble(a[1]); double x2=Double.parseDouble(a[2]); double y2=Double.parseDouble(a[3]); System.out.printf("Distanta este:"+"+f.format(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2y1)))); } } Date de intrare: x1=4;y1=8;x2=2;y2=6; Date de iesire:"Distanta este 2.83" Captura: 37) Sa se scrie o aplicatie care calculeaza suma a doua numere primite ca argumente in linia de comanda: import java.io.*; public class Adunare { public static void main(String arg[]) throws Exception { BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

double nr1,nr2,suma; nr1=Double.parseDoub;e(arg[0]); nr2=Double.parseDoub;e(arg[1]); suma=nr1+nr2; System.out.println("nr1+nr2="+suma); } } Date de intrare:nr1=7;nr2=5 Date de iesire:"nr1+nr2=12.0". Captura: 38)Sa se scrie o aplicatie care rezolva ecuatia de gradul I cu coeficientii primiti ca argumente in linia de comanda: importjava.io.*; import java.util.*; public class Ecuatie1 { public static void main(String arg[]) throws Exception { BufferdReader in=new BufferedReader(new InputStreamReader(System.in)); double a,b,x; a=Double.parseDouble(arg[0]); b=Double.parseDouble(arg[1]); x=(-b)/a; System.out.println("Rezultatul ecuatiei este:"+x); } } Date de intrare: a=4; b=6 Date de iesire:" Rezultatul ecuatiei este: -1.5" Captura: 39) Sa se scrie o aplicatiecare calculeaza aria unui dreptunghi cu lungimea si latimea primite ca argumente in linia de comanda: import java.io.*; import java.util.*; public class Dreptunghi { public static void main(String arg[]) throws Exception { BufferdReader in=new BufferedReader(new InputStreamReader(System.in)); double lung,lat,arie; lung= Double.parseDouble(arg[0]); lat= Double.parseDouble(arg[1]); arie=lung*lat; System.out.println("Aria dreptunghiului este:"+arie); }}

Date de intrare:lung=7; lat=9 Date de iesire:" Aria dreptunghiului este:63.0" Captura: 40) Sa se scrie o aplicatie care sa afiseze numerele prime de la 1 la 100: importjava.io.*; import java.util.*; public class Prime { public static void main(String arg[]) throws Exception { for(int i=1;i<100;i++) { Boolean isPrime; isPrime=true; for(int j=2;j<I;j++) if(i%j==0) isPrime=false; if(isPrime==true) System.out.println(i); } } } Captura: