Download - Probleme Rezolvate Java
-
8/3/2019 Probleme Rezolvate Java
1/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 Exemplupublic 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 implicitExemplu 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:
-
8/3/2019 Probleme Rezolvate Java
2/40
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
-
8/3/2019 Probleme Rezolvate Java
3/40
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 lacapetele" 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:065535short:0-1
byte:0-1
Captura:
-
8/3/2019 Probleme Rezolvate Java
4/40
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 DoWhileDate de intrare: numarCitit=2.3, numarCitit=45.566
Date de iesire: Suma numerelor citite este47.866
-
8/3/2019 Probleme Rezolvate Java
5/40
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 utilizndinstructiunea throw:
import java.io.*;
public class TestExceptii{
public static void main(String args[]){
for(int i=0;i
-
8/3/2019 Probleme Rezolvate Java
6/40
}
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 TestExceptiiDate iesire: "Test caz0Incepe metoda1:
Sfarsit metoda1.Sfarsit caz0
Executam finally!
Test caz1Incepe 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! "
-
8/3/2019 Probleme Rezolvate Java
7/40
Captura:
10) Program Java care compara aruncarea propriilor exceptii fata de exceptiilesistem (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:
-
8/3/2019 Probleme Rezolvate Java
8/40
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
-
8/3/2019 Probleme Rezolvate Java
9/40
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
-
8/3/2019 Probleme Rezolvate Java
10/40
Date intrare: 4 si 16. Date iesire: 2, respectiv 4.
Captura:
14)// definirea unei clase abstracte
abstract class C1 {
// declararea datelor membreint x = 1,y = 2;
// declararea unei metode
void f (int x) {this.x += x;
g(x) ;
}
//declararea unei metode abstracteabstract void g(int y);
}
// definirea unei interfeteinterface 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 C2public class Testare {
public static void main(String[] args) {
C2 obiect = new C2();
obiect.f (4) ;obiect. g (5) ;
obiect. h () ; }}
-
8/3/2019 Probleme Rezolvate Java
11/40
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 obiectObiectSimplu 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:
-
8/3/2019 Probleme Rezolvate Java
12/40
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 C1class 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:
-
8/3/2019 Probleme Rezolvate Java
13/40
17) Declaram un atribut static numar Instante, care va fi incrementat nconstructor. La fiecare instantiere a clasei Increment, se va apela constructorulIncrement numarlnstante.public class NumarareInstante{
public static void main(String args[]){
System.out.println("S-au creat"+Increment.numarInstante+"instante aleclasei 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 obiectfolosind 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");
}
-
8/3/2019 Probleme Rezolvate Java
14/40
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 clasemai 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;
-
8/3/2019 Probleme Rezolvate Java
15/40
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:
-
8/3/2019 Probleme Rezolvate Java
16/40
20) Urmatorul program Java evidentiaza suprascrierea metodelor unei interfeterelativ 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
-
8/3/2019 Probleme Rezolvate Java
17/40
}}
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 clasederivate (TV si Aspirator) din clasa de baza. Fisierul de aplicatii este ntitulatAplicatieElectronice.java.import java.io.*;
//fisierul DispozitiveElectronice.java
interface DispozitiveElectronice{public void setTimpFolosinta(int timp);
public int getTimpFolosinta();
public int getPutere();}
//fisierul Locuinta.javaabstract 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;
}
-
8/3/2019 Probleme Rezolvate Java
18/40
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;
-
8/3/2019 Probleme Rezolvate Java
19/40
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){
-
8/3/2019 Probleme Rezolvate Java
20/40
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) tablourilorbidimensionale 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++)
-
8/3/2019 Probleme Rezolvate Java
21/40
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 listeiclass 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;
-
8/3/2019 Probleme Rezolvate Java
22/40
int numarNoduri;
ListaInlantuita (){
primul=ultimul=null;
numarNoduri=0;
}
//adaugarea se realizeaza la sfarsitul listeivoid adaugaNod(Element nodNou){
nodNou.urmator=null;
if(primul==null)//acesta este primul elementprimul=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=newListaInlantuitaGenerica();
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"));
-
8/3/2019 Probleme Rezolvate Java
23/40
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 timpulexecutiei programului)
ElementGeneric urmator;
//legatura catre urmatorul nodElementGeneric(Object valoareNod){
valoare=valoareNod;
urmator=null;
}}
//clasa corespunzatoare listei generice simplu inlantuiteclass 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 elementprimul=nodNou;
if(ultimul!=null)
ultimul.urmator=nodNou;ultimul=nodNou;
numarNoduri++;
}
//afisarea continutului listeivoid afiseazaLista(){
ElementGeneric temporar=primul;
while(temporar!=null){System.out.println(temporar.valoare + " ");
temporar=temporar.urmator;
}System.out.println();
}
-
8/3/2019 Probleme Rezolvate Java
24/40
}
Captura:
26) Se citesc cuvinte din fisierul numere. txt care vor fi inserate ntr-un arbore decautare. 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
cautareclass 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 dinarbore
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 dejanod.contorCuvant++;
else
if(compara>0)//ne ducem la stanga
-
8/3/2019 Probleme Rezolvate Java
25/40
if(nod.stanga!=null)insereazaNod(nod.stanga, cuvantNou);
else
nod.stanga=new NodArboreBinar(cuvantNou);
else //comapara0)
if(nod.stanga!=null)return gaseste(nod.stanga,cuvantCheie);
else
return null;//nu a fost gasit cuvantCheieelse ///compara
-
8/3/2019 Probleme Rezolvate Java
26/40
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 reprezentareaarborelui
//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);
elsepreordine(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[]){
-
8/3/2019 Probleme Rezolvate Java
27/40
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:
-
8/3/2019 Probleme Rezolvate Java
28/40
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:
-
8/3/2019 Probleme Rezolvate Java
29/40
28) Urmatorul program pune n evidenta crearea (n caz ca nu exista deja) adirectorului 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 sunttrei ntregi: 10000, 20000 si 30000. Apoi pozitionam pointerul la fisier dupa patruocteti (prin apelarea metodei seek()) si astfel vom nlocui 20000 cu 40000. Cu apelulmetodei getFilePointer () vom verifica faptul ca o variabila' de tip int se memoreazantr-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 apoiultimii opt octeti folosind o variabila de tip double.
import java.io.*;
public class FisiereAccesAleator {public static void main(String[] args) {
try {
-
8/3/2019 Probleme Rezolvate Java
30/40
RandomAccessFile fisierUnu = newRandomAccessFile("fisier.bin", "rw");
fisierUnu.writeInt(10000);
fisierUnu.writeInt(20000);
fisierUnu.writeInt(30000);
// vom inlocui in fisier valoarea 200Q0 cu 40000fisierUnu.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 30000RandomAccessFile fisierDoi = new RandomAccessFile("fisier.bin", "r");
// citim primul intregint i = fisierDoi.readInt();System.out.println("i1 = " + i + " pointer = " +
fisierDoi.getFilePointer()) ;
// citim al doilea intregi = 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 doubledouble d = fisierDoi.readDouble();
System.out.println("d = " + d);
fisierDoi.close ();}
catch (IOException es) {
System.out.println("Eroare de citire din fisier " +es.toString()) ;}
}
-
8/3/2019 Probleme Rezolvate Java
31/40
}
Captura:
30) Urmatorul program pune n evidenta utilizarea claselor FileReader siLineNumberReader pentru afisarea unui fisier text, n care fiecare linie esteprecedata 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 demai sus, punnd la nceputul fiecarei linii numarul ei, urmat de caracterul doua puncte si
spatiu.patiu.
-
8/3/2019 Probleme Rezolvate Java
32/40
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)
-
8/3/2019 Probleme Rezolvate Java
33/40
ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream("cerc.dat") ) ;
oos.writeObject(obiect);
oos.close ();
} catch (IOException e) {
System.out.println("Eroare la serializare"); }try {
ObjectInputStream ois = new ObjectInputStream(newFileInputStream("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 fitransmise 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!");}
}
-
8/3/2019 Probleme Rezolvate Java
34/40
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
-
8/3/2019 Probleme Rezolvate Java
35/40
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
-
8/3/2019 Probleme Rezolvate Java
36/40
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 gazdaString numeHost=url.getHost();
System.out.println("Numele host-ului este: " +numeHost);
//obtinem numele portuluiint 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 afiseazacontinutul 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 = "";
-
8/3/2019 Probleme Rezolvate Java
37/40
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;}
}
-
8/3/2019 Probleme Rezolvate Java
38/40
Captura:
36) Sa se determine distanta euclidina dintre 2 puncte ale caror coordonate se dau in liniade 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)*(y2-y1))));
}
}
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 inlinia de comanda:
import java.io.*;public class Adunare
{
public static void main(String arg[]) throws Exception{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
-
8/3/2019 Probleme Rezolvate Java
39/40
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=5Date 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=6Date de iesire:" Rezultatul ecuatiei este: -1.5"
Captura:
39) Sa se scrie o aplicatiecare calculeaza aria unui dreptunghi cu lungimea si latimeaprimite 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);
}}
-
8/3/2019 Probleme Rezolvate Java
40/40
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