Documente Academic
Documente Profesional
Documente Cultură
Pobleme Rezolvate Java
Pobleme Rezolvate Java
}
}
Date iesire: primulX: x=1 | constructor implicit | obiectDoi: x=0 | obiectDoi: x=2 |
obiectDoi: x=3.
Captură:
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
Test caz1
Incepe metoda1:
Exceptie:din metoda1
Executam finally! "
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:
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;
//fisierul TV.java
class TV extends Locuinta implements DispozitiveElectronice{
private int timp=0;
//fisierul Aspirator.java
//fisierul AplicatieElectronice.java
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.total
Putere);
aspirator.setTimpFolosinta(0);
}
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();
}
}
ListaInlantuita (){
primul=ultimul=null;
numarNoduri=0;
}
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();
}
}
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.*;
class Student {
int numarMatricol;
String nume, prenume;
float media;
Captura:
29) Mai întâi 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 rând primii patru octeti (utilizând 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:
//Dupa cum se observa, executia acestui program va afisa codul sursa al programului de
mai sus, punând la începutul fiecarei linii numarul ei, urmat de caracterul doua puncte si
spatiu.patiu.
Captura:
//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:
34)
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
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.*;
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)*(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 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: