Sunteți pe pagina 1din 63

Capitolul ???

Structura programelor Java. Tipuri de date. Instructiuni.


Citirea/Scrierea datelor formatate cu ajutorul clasei Scanner

1. Fluxuri de date

Majoritatea aplicatiilor necesita citirea unor informatii care se gasesc pe o


sursa externa sau trimiterea unor informatii catre o destinatie externa.
Informatia se poate gasi oriunde:
intr-un fisier pe disc
in retea
in memorie
sau in alt program
si poate fi de orice tip: date primitive, obiecte, imagini, sunete, etc.
Pentru a aduce informatii dintr-un mediu extern, un progam Java
trebuie sa deschida un canal de comunicatie (flux) de la sursa informatiilor
(fisier, memorie, socket, etc) si sa citeasca secvential informatiile respective.
Similar, un program poate trimite informatii catre o destinatie externa
deschizand un canal de comunicatie (flux) catre acea destinatie si scriind
secvential informatiile respective.
Indiferent de tipul informatiilor, citirea/scrierea de pe/catre un mediu
extern respecta urmatorul algoritm:

deschide canal comunicatie


while (mai sunt informatii)
{
citeste/scrie informatie;
}
inchide canal comunicatie;

Pentru a generaliza, atat sursa externa a unor date cat si destinatia lor
sunt vazute ca fiind niste procese care produc, respectiv consuma informatii.

Definitii:
Un flux este un canal de comunicatie unidirectional intre doua procese.
Un proces care descrie o sursa externa de date se numeste proces
producator.
Un proces care descrie o destinatie externa pentru date se numeste proces
consumator.
Un flux care citeste date se numeste flux de intrare.
1
Un flux care scrie date se numeste flux de iesire.
Observatii:
Fluxurile sunt canale de comunicatie seriale pe 8 sau 16 biti.
Fluxurile sunt unidirectionale, de la producator la consumator. Fiecare
flux are un singur proces producator si un singur proces consumator. Intre
doua procese pot exista oricate fluxuri, orice proces putand fi atat producator
cat si consumator in acelasi timp, dar pe fluxuri diferite. Consumatorul si
producatorul nu comunica direct printr-o interfata de flux ci prin intermediul
codului Java de tratare a fluxurilor.
Clasele si intefetele standard pentru lucrul cu fluxuri se gasesc in
pachetul java.io. Deci, orice program care necesita operatii de intrare sau
iesire trebuie sa contina instructiunea de import a pachetului java.io:
import java.io.*;

2. Clasificarea fluxurilor

Exista trei tipuri de clasificare a fluxurilor:


1) Dupa directia canalului de comunicatie deschis fluxurile se impart in:
fluxuri de intrare (pentru citirea datelor)
fluxuri de iesire (pentru scrierea datelor)
2) Dupa tipul de date pe care opereaza:
fluxuri de octeti (comunicarea seriala se realizeaza pe 8 biti)
fluxuri de caractere (comunicarea seriala se realizeaza pe 16 biti)
3) Dupa actiunea lor:
fluxuri primare de citire/scriere a datelor (se ocupa efectiv cu
citirea/scrierea datelor)
fluxuri pentru procesarea datelor

3. Intrari si iesiri formatate

Incepand cu versiunea 1.5, limbajul Java pune la dispozitie modalitati


simplificate pentru afisarea formatata a unor informatii, respectiv pentru
citirea de date formatate de la tastatura.

3.1 Intrari formatate

Clasa java.util.Scanner ofera o solutie simpla pentru formatarea unor


informatii citite de pe un flux de intrare fie pe octeti, fie pe caractere, sau
chiar dintr-un obiect de tip File. Pentru a citi de la tastatura vom specifica ca
argument al constructorului fluxul System.in:
2
Scanner s = Scanner.create(System.in);
String nume = s.next();
int varsta = s.nextInt();
double salariu = s.nextDouble();
s.close();

3.2 Iesiri formatate

Clasele PrintStream si PrintWriter pun la dispozitiie, pe langa metodele


print, println care ofereau posibilitatea de a afisa un sir de caractere, si
metodele format, printf (echivalente) ce permit afisarea formatata a unor
variabile.
System.out.printf("%s %8.2f %2d %n", nume, salariu, varsta);
Formatarea sirurilor de caractere se bazeaza pe clasa java.util.Formatter.

Probleme rezolvate:

1. Se citeste un numar n natural. Sa se calculeze suma cifrelor lui.


Exemplu: Pentru n=124 obtinem s=7.

package poo;
import java.util.Scanner;
public class lab_2_1 {

public static void main(String[] args) {


int n,s=0;
System.out.print("dati numarul natural = ");
n = new Scanner(System.in).nextInt();
while(n!=0)
{
s+=n%10;
n/=10;
}
System.out.println ("Suma cifrelor numarului date este egala cu
= " + s);
}

}
3
2. Se citeste un numar n natural. Sa se afiseze numarul obtinut prin
inversarea cifrelor lui.
Exemplu: Pentru n=841 obtinem m=148

package poo;
import java.util.Scanner;
public class lab2_2 {

public static void main(String[] args) {


int n;
System.out.print("dati numarul natural = ");
n = new Scanner(System.in).nextInt();
int m=0;
while(n!=0)
{
m = m*10+n%10;
n/=10;
}
System.out.println ("Numarul obtinut prin inversarea cifrelor
este egal cu = " + m);
}
}

3. Se citeste un numar n natural. Sa se afiseze descompunerea sa in factori


primi.
Exemplu: Pentru n=12 obtinem 22*3.

package poo;
import java.util.Scanner;
public class lab2_3 {

public static void main(String[] args) {


int n;
System.out.print("dati numarul natural = ");
n = new Scanner(System.in).nextInt();
int i=2, fm;
do{
fm=0;
while(n%i==0)
{
fm++;
4
n=n/i;
}
if(fm!=0) System.out.println (i+" la puterea "+fm);
i++;
}while(n>=1);
}
}

4. Se citeste un numar n natural. Sa se afiseze toti divizorii numarului dat.


Exemplu: Pentru n=12 obtinem {1,2,3,4,6,12}.

package poo;
import java.util.Scanner;
public class lab2_4 {

public static void main(String[] args) {


int n;
System.out.print("dati numarul natural = ");
n = new Scanner(System.in).nextInt();
int i=1;
while(i<=n)
{
if(n%i==0) System.out.print(i+", ");
i++;
}
}
}

5. Se citeste un numar n natural. Sa se verifice daca este numar prim sau nu.
Exemplu: Pentru n=12 obtinem NU ESTE numar PRIM, iar pentru n=11
obtinem ESTE numar PRIM.

package poo;
import java.util.Scanner;
public class lab2_5 {

public static void main(String[] args) {


int n;
System.out.print("dati numarul natural = ");
n = new Scanner(System.in).nextInt();
int i=2;
5
boolean prim=true;
while(i<=n/2)
{
if(n%i==0) prim=false;
i++;
}
if(prim==true) System.out.println(n+" ESTE numar PRIM! ");
else System.out.println(n+" NU ESTE numar PRIM! ");
}
}

Probleme propuse spre rezolvare

Problema 1:
Se dau trei numere nenule a,b si k. Sa se verifice daca fractia a/b se
simplifica prin k. In caz afirmativ se va afisa si fractia simplificata.

Problema 2:
Sa se verifice daca trei numere naturale a,b si c sunt pitagorice sau nu.
Numim numere pitagorice, trei numere care indeplinesc una din conditiile
a*a=b*b+c*c, b*b=a*a+c*c, c*c=a*a+b*b.

Problema 3:
Se citesc trei numere a,b,c. Sa se verifice daca aceste numere (puse in
orice ordine) sunt in progresie aritmetica si sa se afiseze ratia progresiei in
caz afirmativ.

Problema 4:
Se dau trei numere a,b,c. Sa se verifice daca pot reprezenta laturile
unui triunghi. In caz afirmativ sa se precizeze ce tip de triunghi este:
echilateral, isoscel, dreptunghic sau oarecare.

Problema 5:
Un punct in plan este dat prin coodonatele sale (x,y). Sa se scrie un
program care determina daca punctul este in origine, intr-un cadran (1,2,3
sau 4), sau pe una din semiaxe (Ox, Ox, Oy, Oy).
Exemplu:
(1,1) cadranul 1
(0,3) axa Oy
(-2,4)- cadranul 2

6
Problema 6:
Sa se calculeze valoarea functiei matematice f(x), pentru o valoare a
lui x introdusa de la tastatura:
x*x+1, pentru x <=-3
f:R->R, f(x) = x 2, pentru -3<x<3
x*x - 4*x + 5, pentru x>=3

Problema 7:
Sa se determine cel mai mare divizor comun (c.m.m.d.c.) si cel mai mic
multiplu comun (c.m.m.m.c.) a doua numere intregi citite de tastatura.
Cmmdc se va calcula folosind cele doua variante:
algoritmul lui Euclid
folosind relatia de mai jos:
cmmdc(a-b,b), daca a > b
cmmdc(x,y) = cmmdc(a,b-a), daca a < b
a, daca a = b

Problema 8:
Sa se verifice daca un numar este numar perfect sau nu. Spunem ca un
numar este numar perfect daca este egal cu suma divizorilor lui, mai putin el
insusi. (Exemplu: numarul 6 este perfect, deoarece este egal cu suma
divizorilor sai 1,2,3).

Problema 9:
Se citesc n numere intregi. Sa se determine minimul si maximul lor.

Problema 10:
Sa se verifice daca un numar este palindrom sau nu. Spunem ca un
numar este palindrom daca este egal cu rasturnatul sau (adica numarul
format din cifrele de la dreapta la stanga ale numarului initial exemplu : n
= 25652).

7
Capitolul ???

Tablouri in limbajul Java. Tablouri unidimensionale. Tablouri


bidimensionale

1. Tablouri unidimensionale (vectori)

Probleme rezolvate:

1. Se citeste un numar n si un vector cu n componente numere intregi. Sa se


afiseze continutul componentelor vectorului.

8
2. Se citeste un numar n si un vector cu n componente numere intregi. Sa se
afiseze valoarea maxima continuta in vector.

9
3. Se citeste un numar n si un vector cu n componente numere reale. Sa se
afiseze elementele vectorului sortate crescator. Se va utiliza metoda sortarii
prin interschimbare.

10
4. Se citeste un numar n si un vector cu n componente numere intregi. Sa se
calculeze si sa se afiseze suma elementelor din vector care sunt divizibile cu
o valoare naturala a citita de la tastatura.

11
5. Se citeste un numar n. Sa se calculeze si sa se afiseze un vector care sa
contina cifrele numarului dat.

12
6. Se citesc doua valori naturale n si m nenule, ce reprezinta numarul de
elemente a doua multimi A si B. Sa se calculeze si apoi sa se afiseze
multimea care reprezinta reuniunea celor doua multimi.

13
Probleme propuse spre rezolvare

1. Se citeste un numar n si un vector cu n componente numere intregi. Sa se


afiseze valoarea minima continuta in vector.

2. Se citesc doua valori naturale n si m nenule, ce reprezinta numarul de


elemente a doua multimi A si B. Sa se calculeze si apoi sa se afiseze
multimea care reprezinta intersectia celor doua multimi.

3. Se citesc doua valori naturale n si m nenule, ce reprezinta numarul de


elemente a doua multimi A si B. Sa se calculeze si apoi sa se afiseze
multimea care reprezinta diferenta A-B a celor doua multimi.

4. Se citeste un numar n si un vector cu n componente numere intregi. Sa se


verifice daca elementele vectorului sunt sau nu in ordine crescatoare.

5. Se considera un vector x = { x1, x2, x3, , xn }. Sa se scrie un program


Java care sa modifice vectorul astfel incat in final sa avem :
a) x = { x2, x3, , xn, x1 }
b) x = { xn, x1, x2, x3, , xn-1 }
c) x = { x2, x1, x4, x3,, xn, xn-1 }

6. Se considera doi vectori x si y cu cate n elemente numre intregi fiecare. Sa


se scrie un program Java care sa calculeze urmatoarele valori :
a) e = (x1+y1) (x2+y2) (xn+yn)
b) e = x1y1 + x2y2 + + xnyn

14
e x12 y1 x 22 y 2 x n2 y n
c)

7. Se considera un vector x care are elemente numere reale. Sa se scrie un


program Java care sa introduca media geometrica intre oricare doua
elemente vecine din vector. Vectorul se va afisa inainte si dupa modificare.

8. Se considera un vector x cu n numere intregi. Sa se copieze intr-un alt


vector y elementele pozitive ale vectorului initial.

9. Se citeste un tablou unidimensional cu n (1n100) componente numere


naturale Se cere sa se construiasca si sa se afiseze un nou vector cu
componentele patrate perfecte ale vectorului initial.

10. Sa se rearanjeze elementele unui tablou unidimensional de numere


intregi, astfel incat numerele pare sa apara inaintea numerelor impare. In
cadrul subsecventei de numere pare, respectiv impare, elementele trebuie sa
apara in ordinea in care erau in vectorul initial.

11. Se considera un tablou unidimensional x cu n numere intregi. Se cere sa


se calculeze cel mai mare divizor comun al lor.

12. Se da un tablou unidimensional X cu n numere reale si se cere sa se


modifice astfel incat sa se intercaleze intre oricare doua elemente
consecutive, media lor aritmetica.

15
2. Tablouri bidimensionale (matrici)

Probleme rezolvate:

7. Programul urmator (loto.java) ilustreaza modul de folosire al sirurilor in


Java. In jocul de loterie, se selecteaza saptamanal sase numere de la 1 la 49.
Programul alege aleator numere pentru 1000 de jocuri si afiseaza apoi de
cate ori a aparut fiecare numar in cele 1000 de jocuri.

16
8. Se consider o matrice A cu nm numere ntregi. Se cere s se obin
transpusa sa.

17
9. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Sa se memoreze intr-un vector V sumele elementelor de pe fiecare
linie a matricii (V[i] va reprezenta suma elementelor de pe linia i in matrice.)

18
10. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Sa se determine maximul fiecarei coloane si minimul fiecarei linii.

19
11. Se considera o matrice An*n (1n30) avand componente numere intregi.
Sa se memoreze intr-un vector V elementele pozitive aflate deasupra
diagonalei principale in matrice, apoi sa se tipareasca vectorul.

20
21
Probleme propuse spre rezolvare

1. Sa se construiasca o matrice patratica (n=m) de dimensiune n2


(1n30) cu primele numere pare incepand cu 2.

2. (Puncte a) Fie un tablou bidimensional A(n,m). Un punct a al acestui


tablou este un element a[i0][j0] cu proprietatea:
a[i0][j0] = min { a[i0][j], unde 0jm-1 } = max { a[i][j0], unde
0in-1}
Scrieti un program Java care determina punctele a (daca exista) ale unui
tablou bidimensional.

3. Fiind dat un tablou bidimensional A(n,m) de numere intregi, sa se


calculeze si sa afiseze suma elementelor aflate pe marginea (rama)
tabloului.
Exemplu: Pentru n = 3 si m = 4 si se va afisa suma 1 + 2 + 3 + 4 + 5 + 6 + 7
+ 8 + 9 + 10 = 47.

4. Fiind dat un tablou bidimensional A(n,m) de numere intregi, sa se afiseze:


a) produsul elementelor pozitive aflate pe linii pare si coloane impare.
b) suma elementelor pozitive impare din matrice.
c) numarul elementelor pozitive, negative si respectiv nule dn matrice.
d) elementele aflate pe linii impare si coloane divizibile cu 3.

5. Fiind dat un tablou bidimensional A(n,m) de numere intregi, sa scrie un


program Java care sa stabileasca de cate ori apare o valoare data x ca
element al matricii.

6. Fiind dat un tablou bidimensional A(n,m) de elemente 0 si 1. Sa se scrie


un program Java care afiseaza numarul maxim de elemente egale cu 1
continute pe o linie.

7. Fiind dat un tablou bidimensional A(n,m) de numere intregi. Sa se scrie


un program Java care sa determine linia (liniile) din matrice care contine
cele mai multe elemente nenule.

8. Fiind dat un tablou bidimensional A(n,m) de numere intregi. Sa se scrie


un program Java care sa afiseze numarul/numerele de ordine a liniilor din
tablou care au cele mai multe componente distincte.

22
Capitolul ????

Siruri de caractere (clasa String)

1. Siruri de caractere (clasa String)

Inlocuirea aparitiilor unui caracter dintr-un sir cu un alt caracter

Metoda replace este folosita pentru a construi un nou sir de caractere


obtinut prin inlocuirea aparitiilor unui caracter cu un alt caracter, in sirul
curent.
Antetul metodei este:

public String replace(char <caracterVechi>, char <caracterNou>)


unde:
- <caracterVechi> - caracterul de inlocuit;
- <caracterNou> - caracterul cu care se inlocuieste.
Metoda replace returneaza un sir nou de caractere construit cu caracterele
inlocuite, date de parametrul <caracterNou>, daca caracterele specificate in
parametrul <caracterVechi> sunt gasite in sirul curent sau returneaza un sir
nou de caractere care este identic cu cel initial, daca caracterul specificat in
parametrul <caracterVechi> nu apare in sirul curent.
De exemplu:
String sir1 = Ionescu Ion;
String sir2 = sir1.replace(I, J); // sir2 va avea valoarea Jonescu Jon

Inlocuirea aparitiilor unei secvente de caractere (subsir), dintr-un sir, cu


o alta secventa de caractere (subsir)

Metoda replace este folosita si pentru a construi un nou sir de caractere


obtinut prin inlocuirea aparitiilor unei secvente de caractere cu o alta
secventa de caractere, in sirul curent.
Antetul metodei replace in aceasta varianta este:

public String replace(String <secventaVeche>, String <secventaNoua>)

- <SecventaVeche> - secventa de caractere de inlocuit;


23
- <secventaNoua> - secventa de caractere cu care se inlocuieste.
Metoda replace, in aceasta varianata, returneaza un sir nou de caractere
construit cu secventele de caractere inlocuite, date de parametrul
<secventaNoua>, daca secventele de caractere specificate in parametrul
<secventaVeche> sunt gasite in sirul curent sau returneaza un sir nou de
caractere care este identic cu cel initial, daca secventa de caractere
specificata in parametrul <SecventaVeche> nu apare in sirul curent.

Eliminarea caracterelor albe de la inceputul si sfarsitul unui sir de


caractere

Metoda trim este folosita pentru eliminarea caracterelor albe de la inceputul


si sfarsitul sirului de caractere curent.

Antetul metodei este:

public String trim()

Metoda trim() returneaza un nou sir de caractere din care sunt eliminate
caracterele albe de la inceputul sau sfarsitul sirului curent, daca acestea exita
in sirul curent, sau returneaza sirul curent, daca caracterele albe nu exista in
sir. Daca in sirul curent exista numai caractere albe atunci sirul nou creat
este sirul vid ().

Convertirea unui sir de caractere la un tablou de caractere

Metoda toCharArray converteste un sir de caractere la un nou tablou de


caractere.

Antetul metodei este:

public char[] toCharArray()

Metoda toCharArray aloca o zona de memorie pentru un tablou de


caractere al carui continut este initializat cu secventa de caractere
reprezentata de sirul de caractere.

Urmatorul program (ReplaceSiruri.java) ilustreaza modul de folosire a


metodei replace in varianta inlocuiri unui subsir de caractere cu un alt subsir
de caractere, citite de la tastatura, intr-un sir de caractere, de asemenea citit
de la tastatura, a metodei trim pentru inlocuirea caracterelor albe (\r si \n)
dintr-o secventa de caractere, precum si a metodei toCharArray pentru
24
convertirea sirului, din care s-au eliminat caracterele albe, la un tablou de
caractere.
De asemenea, programul arata si modul de apelare a metodei length()
pentru obtinerea lungimii unui sir de caractere.

Dupa executia programului pe ecran se afiseaza urmatoarele rezultate:

25
Probleme propuse spre rezolvare

1. Se da urmatorul tablou de cuvinte (siruri de caractere):


Martie,Aprilie, Luna, An. Sa se afiseze cte un mesaj care sa
specifice cu ce litera ncepe fiecare cuvnt dat, folosind instructiunea switch.

2. Sa se scrie o functie pentru inlocuirea tuturor aparitiilor unui sir dat s1


printr-un alt sir
s2 in cadrul unui sir s, folosind numai metode ale clasei String.

3. S se afieze numrul de vocale dintr-un text scris cu litere mici, memorat


intr-o variabil de tip ir de caractere.
Exemplu:
Date de intrare: Programarea calculatoarelor
Date de ieire: Exista 12 vocale in text

4. S se afieze cu litere mari un text dat, de maxim 255 caractere.


Exemplu:
Date de intrare text: liMBajUl jaVa
Date de ieire LIMBAJUL JAVA

5. Se citete un ir de caractere. S se afieze litera cea mai des ntlnit.


Exemplu:
Date de intrare text: carte de informatica si programare
Date de ieire: a apare de 5 ori

6. S se afieze toate prefixele i sufixele unui cuvnt citit de la tastatur.


Exemplu:
Date de intrare: informatica
Date de ieire:
prefixe sufixe
i a
in ca
inf ica
info tica
infor atica
inform matica
informa rmatica
informat ormatica
informati formatica
informatic nformatica
informatica informatica
26
7. Se citete de la tastatur un caracter c i un text de maxim 100 de
carectere. Afiai de cte ori apare caracterul c n cadrul textului. Literele
mari se vor considera diferite de literele mici.
Exemplu:
Date de intrare:
Acesta este un simplu exemplu
Caracterul e
Date de ieire: Litera e apare de 5 ori

8. Se citete de la tastatur un ir de maxim 100 de caractere format numai


din litere i cifre. Afiai numrul literelor mari, numrul literelor mici i
numrul caracterelor de tip cifr din textul dat.
Exemplu:
Date de intrare:
S-a nascut la Targu Jiu in 1968 pe 21 martie
Date de ieire: Se gasesc 25 de litere mici, 2 litere mari si 6 cifre

27
Capitolul ???
Crearea claselor de obiecte.
Variabilele (campurile) clasei de obiecte

Probleme rezolvate:

1. Programul urmator (LotoConstante.java) ilustreaza modul de folosire al


constantelor pentru atributele clasei. In jocul de loterie, se selecteaza
saptamanal sase numere de la 1 la 49. Programul alege aleator numere
pentru 1000 de jocuri si afiseaza apoi de cate ori a aparut fiecare numar in
cele 1000 de jocuri. Se definesc trei constante de tip intreg pentru clasa
LotoConstante:
o NUMERE care are valoarea 49,
o NUMERE_PE_JOC care are valoarea 6
o si JOCURI are valoarea 1000.

import java.io.*;
public class LotoConstante
{
static final int NUMERE = 49;
static final int NUMERE_PE_JOC = 6;
static final int JOCURI = 1000;
// genereaza numere de loterie intre 1 si 49
// afiseaza numarul de aparitii al fiecarui numar
public static void main(String[] args) throws IOException
{
// genereaza numerele
int[] numere = new int[50];
for (int i = 0; i < numere.length; ++i)
numere[i] = 0;
for (int i = 0; i < JOCURI; ++i)
for (int j = 0 ; j < NUMERE_PE_JOC; ++j)
numere[(int) (Math.random() * NUMERE) +1]++;

// numara aparitiile de numere pe joc


// afisare rezultate
for (int k = 1; k <= NUMERE; ++k)
System.out.println(k + ": " + numere[k]);
}
}

28
Rezultatul executiei programului este:

1: 98 26: 124
2: 128 27: 106
3: 131 28: 135
4: 127 29: 137
5: 123 30: 129
6: 109 31: 110
7: 122 32: 111
8: 134 33: 121
9: 113 34: 122
10: 132 35: 108
11: 130 36: 114
12: 138 37: 121
13: 121 38: 126
14: 131 39: 105
15: 120 40: 123
16: 132 41: 126
17: 130 42: 104
18: 142 43: 118
19: 125 44: 138
20: 124 45: 136
21: 123 46: 119
22: 130 47: 114
23: 108 48: 108
24: 128 49: 125
25: 121

29
titlu

2. Exemplificarea domeniului de vizibilitate a variabilelor

Programul are declarate doua variabile cu acelasi nume. Prima, o variabila


de instanta, are numele test si a fost initializata cu valoarea 10. A doua este un
parametru cu acelasi nume al metodei printTest, insa cu valoarea 20. Parametrul
test din cadrul metodei printTest ascunde variabila de instanta test.
Metoda printTest apelata in metoda main afiseaza parametrul test cu
valoarea 20 si nu variabila de instanta.

class TestDomeniu {
int test = 10;
void printTest(int test) {
System.out.println("test = " + test);}
public static void main (String args[]) {
TestDomeniu st = new TestDomeniu();
st.printTest(20);
}
}

Se poate evita aceasta eroare folosind referinta this ca o referinta la obiectul


curent. Astfel, this.test refera variabila de instanta si numele simplu test refera
parametrul metodei printTest. Programul de mai sus se poate, astfel, modifica
(TestDomeniuThis.java) pentru a afisa valoarea 10 a variabilei de instanta si nu
valoarea parametrului.

class TestDomeniuThis {
int test = 10;
void printTest(int test) {
System.out.println("test = " + this.test);
}
public static void main (String args[]) {
TestDomeniuThis st = new TestDomeniuThis();
st.printTest(20);
}
}

3. Definirea unei clase Complex si a unei metode simple de afisare a datelor


membru:

class Complex{
// date membru

30
titlu

double x,y;
// metoda
void afis()
{ System.out.println(x+" "+y); }
}
public class test1 {
public static void main(String args[])
{
// declaram un numar complex
Complex z1; // constructor implicit
z1 = new Complex(); // Complex z1 = new Complex();
z1.x=3;
z1.y=-10;
// afisam datele membru
z1.afis();
}
}

Avem, clasa Complex:


- clasa contine doua date membru, x si y, ambele de tip double
- clasa contine o metoda care are rolul de a afisa intr-un mod convenabil
datele membru ale clasei.
Clasa test1 metoda main():
- Complex z1 ; - variabila z1 este de un tip Complex. Prin, urmare, ea poate
retine o referinta (adresa) catre un obiect de tip Complex.
- z1=new Complex(); - se creeaza un obiect de tip Complex si referinta
catre el este retinuta de z1;
- z1.x=3; z1.y=-10; - datelor membru x si y ale obiectului a carui
referinta este retinuta de z1 li se atribuie, valorile 3, respectiv -10.
- z1.afis(); - se afiseaza numarul complex retinut de obiectul referit de
z1;

31
titlu

Probleme propuse spre rezolvare

1. Definii i implementai clasa Triunghi, avnd ca date membre Latura1,


Latura2 i Latura3 i ca funcii membre: un constructor, Aria i Perimetrul.
Indicatii:
Perimetrul unui triunghi este dat de relatia: Perimetrul =
Latura1+Latura2+Latura3
Aria unui triunghi este data de relatia: Aria=sqrt(sp*(sp-Latura1)*(sp-
Latura2)*(sp-Latura3)), unde am notat cu sp - semiperimetrul triunghiului.

2. Definii i implementai clasa Cerc, avnd ca dat membru Raza, un


constructor i ca funcii membre Aria i Circumferinta.
Indicatii:
Aria unui cerc este data de relatia: Aria=PI*raza*raza
Circumferinta unui cerc este data de relatia: Circumferinta=2*PI*raza

3. Definii i implementai clasa Cilindru, avnd ca date membre Raza i


Inaltimea cilindrului i ca funcii membre: un constructor, Aria i Volumul.
Indicatii:
Aria unui cilindru este data de relatia: Aria=2*PI*raza*inaltimea
Volumul unui cilindru este data de relatia: Volumul=PI*raza*raza*inaltimea

4. Definii i implementai clasa Sfera, avnd ca dat membru Raza i ca funcii


membre: un constructor, Aria i Volumul.
Indicatii:
Aria unei sfere este data de relatia: Aria=4*PI*raza*raza
Volumul unei sfere este data de relatia: Volumul=4*PI*raza*raza*raza/3

5. Definii i implementai clasa Patrat, avnd ca dat membru Latura i ca


funcii membre: un constructor, Aria i Perimetrul.
Indicatii:
Aria unui patrat este data de relatia: Aria=latura*latura
Perimetrul unui patrat este data de relatia: Perimetrul=4*latura

32
titlu

Capitolul Programare vizuala in Java

1. Introducere in programarea vizuala (Pachetele AWT si Swing. Ferestre)


2. Colectii

1. Introduceti urmatorul program JAVA:

import javax.swing.*;
public class Pv{
public static void main(String args[ ]){
JFrame fer=new JFrame("prima fereastra");
fer.setSize(200,300);
fer.setLocation(300,400);
fer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fer.setVisible(true);
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

2. Introduceti urmatorul program JAVA:

Se poate construi o clasa, numita Fereastra, al carei constructor sa returneze


obiectul cu toate datele din exemplul anterior:

import javax.swing.*;
class Fereastra extends JFrame{

33
titlu

Fereastra(String Nume, int lat, int inalt, int dreapta, int stanga)
{
super(Nume);
setSize(lat,inalt);
setLocation(dreapta, stanga);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class Pv{
public static void main(String args[ ]){
Fereastra f=new Fereastra("fereastra", 100, 200, 25, 100);
}
}

Rezultatul executiei acestui program este aparitia


urmatoarei ferestre:

3. Introduceti urmatorul program JAVA:

Exemplu de program care afiseaza doua butoane (fisierul Pv1.java). Apasarea


butoanelor nu are nici un efect.
import java.awt.*;
import javax.swing.*;
class Fer extends JFrame{
public Fer(String titlu)
{
super(titlu);
setSize(200,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container x = getContentPane();
x.setLayout(new FlowLayout());
JButton A = new JButton("Buton 1"); x.add(A);

34
titlu

JButton B = new JButton("Buton 2"); x.add(B);


setVisible(true);
}
}
public class Pv1{
public static void main(String args[ ]){
Fer fp = new Fer("fereastra cu doua butoane");
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

4. Introduceti urmatorul program JAVA:


Am extins programul anterior. Cand se apasa un buton, in fereastra CMD
(Console din Eclipse) va aparea sirul retinut de butonul apasat.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class Fer extends JFrame implements ActionListener{
public Fer(String titlu)
{
super(titlu);
setSize(200,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container x = getContentPane();
x.setLayout(new FlowLayout());
JButton A = new JButton("Buton 1"); x.add(A);
JButton B = new JButton("Buton 2"); x.add(B);
A.addActionListener(this);
B.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent e)

35
titlu

{
if(e.getActionCommand().compareTo("Buton 1") == 0)
System.out.println("Ai apasat Buton 1");
else
System.out.println("Ai apasat Buton 2");
}
}
public class Pv3{
public static void main(String args[ ]){
Fer fp = new Fer("Doua butoane");
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

5. Introduceti urmatorul program JAVA:

import java.awt.*;
import javax.swing.*;
class Fer extends JFrame
{
public Fer(String titlu)
{
super(titlu);
setSize(300, 150);
Container x = getContentPane();
x.setLayout(new FlowLayout());
JButton A = new JButton("Buton 1"); x.add(A);
JButton B = new JButton("Buton 2"); x.add(B);
JButton C = new JButton("Buton 3"); x.add(C);

36
titlu

JButton D = new JButton("Buton 4"); x.add(D);


JButton E = new JButton("Buton 5"); x.add(E);
JButton F = new JButton("Buton 6"); x.add(F);
JButton G = new JButton("Buton 7"); x.add(G);
setVisible(true);
}
}
public class Pv4
{
public static void main(String args[ ])
{
Fer fp=new Fer("Modalitati de afisare butoane");
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

6. Introduceti urmatorul program JAVA:

Prin utilizarea gestionarului FlowLayout se adauga unei ferestre, doua butoane:


primul de dimensiune stabilita,
iar al doilea de dimensiune implicita

import java.awt.*;
import javax.swing.*;
class Fer extends JFrame
{
public Fer(String titlu) {
super(titlu);
setSize(300, 150);
Container x = getContentPane();
x.setLayout(new FlowLayout());
JButton A = new JButton("Buton 1");
A.setPreferredSize(new Dimension(100,100));

37
titlu

x.add(A);
JButton B = new JButton("Buton 2"); x.add(B);
setVisible(true);
}
}
public class Pv6 {
public static void main(String args[ ]) {
Fer fp=new Fer("Butoane de dimensiuni diferite");
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

7. Introduceti urmatorul program JAVA:

Clasa BorderLayout imparte suprafata ferestrei in 5 parti:


nord(NORTH),
sud(SOUTH),
est(EAST),
vest(WEST)
si centru (CENTER).
In fiecare parte se poate aseza o componenta.

import java.awt.*;
import javax.swing.*;
class Fer extends JFrame
{
public Fer(String titlu) {
super(titlu);
setSize(300, 100);
Container x = getContentPane();
x.setLayout(new BorderLayout());
JButton A = new JButton("Buton 1"); x.add(A,
BorderLayout.SOUTH);
38
titlu

JButton B = new JButton("Buton 2"); x.add(B,


BorderLayout.NORTH);
JButton C = new JButton("Buton 3"); x.add(C,
BorderLayout.WEST);
JButton D = new JButton("Buton 4"); x.add(D,
BorderLayout.EAST);
JButton E = new JButton("Buton 5"); x.add(E,
BorderLayout.CENTER);
setVisible(true);
}
}
public class Pv6 {
public static void main(String args[ ]) {
Fer fp=new Fer("Butoane in 5 zone");
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

8. Aplicatie de tip fereastra care are un obiect de tip JButton, si unul de tip
JLabel. Atunci cand se efectueaza un click de mouse pe buton, eticheta, eticheta
va afisa textul A-ti facut click de n ori unde n reprezinta numarul de apasari
inregistrate pana in acel moment.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestFrame extends JFrame implements ActionListener{
private JButton buton;
private JLabel eticheta;
private JPanel panou;
private int contor=0;

public TestFrame()
{
addWindowListener(new WindowAdapter(){

39
titlu

public void windowClosing(WindowEvent ev){


System.exit(0);
}});
Container contentPane = getContentPane();
panou = new JPanel();
panou.setLayout(new BorderLayout());
buton = new JButton("Apasa");
panou.add(buton, BorderLayout.SOUTH);
buton.addActionListener(this);
eticheta = new JLabel();
eticheta.setHorizontalAlignment(JLabel.CENTER);
panou.add(eticheta,BorderLayout.NORTH);
contentPane.add(panou);
}
public void actionPerformed(ActionEvent ev) {
if(ev.getSource() instanceof JButton)
{
if(ev.getSource() == buton )
{
contor++;
eticheta.setText("A-ti facut click de " +
String.valueOf(contor)+ " ori");
}
}
}
public static void main ( String[] args ) {
TestFrame f = new TestFrame();
f.setSize(150,100);
f.setVisible(true);
}
}

Rezultatul executiei acestui program este aparitia urmatoarei ferestre:

40
titlu

Probleme propuse spre rezolvare

1. Modificati programul 1, astfel incat sa afisati pe ecran doua ferestre, in zone


diferite si care sa fie cu titlurile Window 1, respectiv Window 2.

2. Modificati programul 2, astfel incat sa afisati pe ecran doua ferestre, in zone


diferite si care sa fie cu titlurile Fereastra 1, respectiv Fereastra 2.

3. Modificati programul 3, astfel incat sa afisati pe ecran sase butoane, notate


Button 1, Button 2, Button 3, Button 4, Button 5, Button 6.

4. Modificati programul 4, astfel incat sa afisati pe ecran sase butoane, notate


Buton 1, Buton 2, Buton 3, Buton 4, Buton 5, Buton 6, iar la
apasarea fiecarui buton sa se afiseze mesaj corespunzator butonului apasat.

5. Modificati programul 5, astfel incat sa afisati pe ecran noua butoane, notate


corespunzator si care sa apara cate doua pe linie.

6. Modificati programul 6, astfel incat sa afisati pe ecran patru butoane, notate


corespunzator si care sa fie de dimensiuni diferite.

7. Introduceti programul 8 si verificati executia astfel incat rezultatul sa fie cel


specificat.

41
titlu

2. Colectii

1. Urmatorul exemplu foloseste diferite clase de colectii si adauga cate un


element in aceste colectii
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
Exemplu de tipuri de clase
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List lnkLst = new LinkedList();
lnkLst.add("element1");
lnkLst.add("element2");
lnkLst.add("element3");
lnkLst.add("element4");
displayAll(lnkLst);
List aryLst = new ArrayList();
aryLst.add("x");
aryLst.add("y");
aryLst.add("z");
aryLst.add("w");
displayAll(aryLst);
Set hashSet = new HashSet();
hashSet.add("set1");
hashSet.add("set2");
hashSet.add("set3");
hashSet.add("set4");
displayAll(hashSet);
SortedSet treeSet = new TreeSet();

42
titlu

treeSet.add("1");
treeSet.add("2");
treeSet.add("3");
treeSet.add("4");
displayAll(treeSet);
LinkedHashSet lnkHashset = new LinkedHashSet();
lnkHashset.add("one");
lnkHashset.add("two");
lnkHashset.add("three");
lnkHashset.add("four");
displayAll(lnkHashset);
Map map1 = new HashMap();
map1.put("key1", "J");
map1.put("key2", "K");
map1.put("key3", "L");
map1.put("key4", "M");
displayAll(map1.keySet());
displayAll(map1.values());
SortedMap map2 = new TreeMap();
map2.put("key1", "JJ");
map2.put("key2", "KK");
map2.put("key3", "LL");
map2.put("key4", "MM");
displayAll(map2.keySet());
displayAll(map2.values());
LinkedHashMap map3 = new LinkedHashMap();
map3.put("key1", "JJJ");
map3.put("key2", "KKK");
map3.put("key3", "LLL");
map3.put("key4", "MMM");
displayAll(map3.keySet());
displayAll(map3.values());
}
static void displayAll(Collection col) {
Iterator itr = col.iterator();
while (itr.hasNext()) {
String str = (String) itr.next();
System.out.print(str + " ");
}
System.out.println();
}
}

43
titlu

Rezultatul obtinut este:


element1 element2 element3 element4
xyzw
set1 set2 set3 set4
1234
one two three four
key4 key3 key2 key1
MLKJ
key1 key2 key3 key4
JJ KK LL MM
key1 key2 key3 key4
JJJ KKK LLL MMM

1. Sa se determine dimensiunea(numarul de elemente) unei colectii?

Se vor utiliza metodele:


collection.add() pentru adaugarea unui nou element intr-o colectie
collection.size() pentru a afla dimensiunea colectiei din clasa Collection

import java.util.*;
public class CollectionTest {
public static void main(String [] args) {
int size;
HashSet collection = new HashSet ();
String str1 = "Galben", str2 = "Alb", str3 = "Verde", str4 =
"Albastru";
Iterator iterator;
collection.add(str1);
collection.add(str2);
collection.add(str3);
collection.add(str4);
System.out.print("Informatiile colectiei: ");
iterator = collection.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next() + " ");
}
System.out.println();
size = collection.size();
if (collection.isEmpty()){
System.out.println("Collection este vida");
} else{
System.out.println( "Numarul de elemente din Collection: " + size);
}

44
titlu

System.out.println();
}
}

Rezultatul obtinut este:

Informatiile colectiei: Albastru Alb Verde Galben


Numarul de elemente din Collection: 4

2. Sa se afle valoarea minima si maxima dintr-o colectie de tip List?

import java.util.*;
public class Main {
public static void main(String[] args) {
List list = Arrays.asList("one Two three Four five six
one three Four".split(" "));
System.out.println(list);
System.out.println("max: " + Collections.max(list));
System.out.println("min: " + Collections.min(list));
}
}

Rezultatul:

[one, Two, three, Four, five, six, one, three, Four]


max: three
min: Four

3. Sa se implementeze o clasa Catalog care sa permita urmatoarele operatii:

1) Adaugarea unui student (nume, media)


2) Afisarea tuturor studentilor
3) Cautarea unui student dupa nume
4) Stergerea unui student dupa nume
5) Ordonarea studentilor alfabetic dupa nume
6) Ordonarea studentilor dupa medie

import java.util.*;
class Student{
public String nume;
public int media;
public Student (String nume, int media){

45
titlu

this.nume = nume;
this.media = media;
}
public void afisare (){
System.out.println ("Nume: " + nume + " media: " + media);
}
};
class ComparatorNume implements Comparator
{
public int compare (Object o1, Object o2)
{
Student s1 = (Student) o1;
Student s2 = (Student) o2;
// String.compareTo este echivalenta cu functia strcmp
return s1.nume.compareTo (s2.nume);
}
}
class ComparatorMedie implements Comparator
{
public int compare (Object o1, Object o2)
{
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return s1.media - s2.media;
}
}
class Catalog
{
// in acest exemplu, putea fi si private ArrayList lista
private LinkedList lista;
public Catalog ()
{
// daca foloseam ArrayList, inlocuiam aceasta linie cu:
// lista = new ArrayList ()
lista = new LinkedList ();
}
public void adaugare (Student s){
lista.add (s);
}
public void afisare (){
Iterator it = lista.iterator ();
while (it.hasNext ())
{

46
titlu

Student crt = (Student) it.next ();


crt.afisare ();
}
}
public Student cautare (String nume)
{
Iterator it = lista.iterator ();
while (it.hasNext ())
{
Student crt = (Student) it.next ();
if (crt.nume.equals (nume))
return (crt);
}
return null; //daca nu s-a gasit
}
public void stergere (String nume)
{
Iterator it = lista.iterator ();
while (it.hasNext ())
{
Student crt = (Student) it.next ();
if (crt.nume.equals (nume)) it.remove ();
}
}
public void ordonare_medie ()
{
Collections.sort (lista, new ComparatorMedie ());
}

public void ordonare_alfabetic (){


Collections.sort (lista, new ComparatorNume ());
}
}
public class Problema_rezolvata
{
public static void main(String[] args)
{
Catalog c = new Catalog ();
Student s1 = new Student ("Ionescu", 10);
Student s2 = new Student ("Vasile", 5);
Student s3 = new Student ("Popescu", 8);
Student s4 = new Student ("Georgescu", 1);
c.adaugare (s1);

47
titlu

c.adaugare (s2);
c.adaugare (s3);
c.adaugare (s4);
System.out.println ("Dupa adaugare:");
System.out.println("----------------------------");
c.afisare ();
Student s = c.cautare ("Georgescu");
if (s != null){
System.out.println("----------------------------");
System.out.println ("Am gasit studentul:");
s.afisare ();
System.out.println("----------------------------");
}
else
System.out.println ("Georgescu nu a fost gasit !");
c.stergere ("Georgescu");
System.out.println("----------------------------");
System.out.println ("Dupa stergere:");
System.out.println("----------------------------");
c.afisare ();
c.ordonare_alfabetic ();
System.out.println("----------------------------");
System.out.println ("Dupa ordonare alfabetic:");
System.out.println("----------------------------");
c.afisare ();
c.ordonare_medie ();
System.out.println("----------------------------");
System.out.println ("Dupa ordonare dupa medie:");
System.out.println("----------------------------");
c.afisare ();
}
}

48
titlu

Probleme propuse spre rezolvare

1. Sa se creeze o clasa care sa contina ca data membra privata un vector (tablou


unidimensional) de numere ntregi de dimensiune variabila, care se stabileste
pentru fiecare obiect la constructia acestuia.
n aceasta clasa redefiniti functia toString(), care sa afiseze numerele continute.
n functia main() a clasei principale construiti un obiect din clasa creata care sa
contina numerele 2, 9, 4, 5, 7, 8 si afisati continutul acestuia folosind functia
toString() a clasei respective.

2. Sa se creeze o clasa Complex, pentru definirea unui numar complex, cu partea


reala si imaginara ca numere de tip double.
Definiti constructorii, functia de afisare (toString()), functia de testare a egalitatii
a doua obiecte (equals()) , o functie care realizeaza adunarea a doua numere
complexe.
n functia main() creati doua obiecte din clasa Complex, cu valorile 2, 4,
respectiv 5, 6 a partilor reale si imaginare.
Verificati daca cele doua obiecte sunt egale si afisati rezultatul la consola.
Calculati si afisati suma celor doua numere complexe.

3. Sa se creeze un program care sa contina urmatoarele clase si interfete:


Clasa Persoana care contine variabila membra private String nume, functiile
necesare pentru citirea si scrierea acestei variabile, constructori, etc.
Interfata Adresa care declara functiile abstracte String getAdresa() si void
setAdresa(String s);
Clasa Student care extinde clasa Persoana si implementeaza interfata Adresa.
Clasa Profesor care extinde clasa Persoana si implementeaza interfata Adresa.
n functia main() a programului sa se creeze un obiect Student, cu numele
Ionescu si adresa Targu-Jiu si un obiect Profesor cu numele Popescu si adresa
Craiova.
Afisati la consola datele celor doua obiecte (numele si adresa).

49
titlu

Introducere in programarea vizuala - Pachetul AWT

Probleme rezolvate:

1. Fisierul First.java:
import java.awt.*;

class First extends Frame{


First(){
Button b=new Button("click me");
b.setBounds(30,100,80,30);// setting button position

add(b); //adding button into frame


setSize(300,300); //frame size 300 width and 300 height
setLayout(null); //no layout now bydefault BorderLayout
setVisible(true); //now frame willbe visible, bydefault not visible
}
public static void main(String args[]){
First f=new First();
}
}

2. Fisierul First2.java:
import java.awt.*;
class First2{
First2(){
Frame f=new Frame();
Button b=new Button("click me");
b.setBounds(30,50,80,30);
f.add(b);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[]){
First2 f=new First2();
}
}

50
titlu

3. AwtControlDemo.java

import java.awt.*;
import java.awt.event.*;

public class AwtControlDemo {

private Frame mainFrame;


private Label headerLabel;
private Label statusLabel;
private Panel controlPanel;

public AwtControlDemo(){
prepareGUI();
}

public static void main(String[] args){


AwtControlDemo awtControlDemo = new AwtControlDemo();
awtControlDemo.showEventDemo();
}

private void prepareGUI(){


mainFrame = new Frame("Java AWT Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
headerLabel = new Label();
headerLabel.setAlignment(Label.CENTER);
statusLabel = new Label();
statusLabel.setAlignment(Label.CENTER);
statusLabel.setSize(350,100);

controlPanel = new Panel();


controlPanel.setLayout(new FlowLayout());

mainFrame.add(headerLabel);
mainFrame.add(controlPanel);

51
titlu

mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}

private void showEventDemo(){


headerLabel.setText("Control in action: Button");

Button okButton = new Button("OK");


Button submitButton = new Button("Submit");
Button cancelButton = new Button("Cancel");

okButton.setActionCommand("OK");
submitButton.setActionCommand("Submit");
cancelButton.setActionCommand("Cancel");

okButton.addActionListener(new ButtonClickListener());
submitButton.addActionListener(new ButtonClickListener());
cancelButton.addActionListener(new ButtonClickListener());

controlPanel.add(okButton);
controlPanel.add(submitButton);
controlPanel.add(cancelButton);

mainFrame.setVisible(true);
}

private class ButtonClickListener implements ActionListener{


public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if( command.equals( "OK" )) {
statusLabel.setText("Ok Button clicked.");
}
else if( command.equals( "Submit" ) ) {
statusLabel.setText("Submit Button clicked.");
}
else {
statusLabel.setText("Cancel Button clicked.");
}
}

52
titlu

}
}

4. Fisierul GridLayoutDemo.java:

Grid Layout Demo

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GridLayoutDemo extends Jframe implements ActionListener {


private JButton b[];
private String names[] = { "one", "two", "three", "four", "five", "six" };
private boolean toggle = true;
private Container c;
private GridLayout grid1, grid2;

public GridLayoutDemo(){
super( "GridLayout Demo" );
grid1 = new GridLayout( 2, 3, 5, 5 );
grid2 = new GridLayout( 3, 2 );
c = getContentPane();
c.setLayout( grid1 );
b = new JButton[ names.length ];
for (int i = 0; i < names.length; i++ ) {
b[ i ] = new JButton( names[ i ] );

53
titlu

b[ i ].addActionListener( this );
c.add( b[ i ] );
}
setSize( 300, 150 );
show();
}

public void actionPerformed( ActionEvent e ){


if ( toggle ) c.setLayout( grid2 );
else c.setLayout( grid1 );
toggle = !toggle;
c.validate();
}

public static void main( String args[] ) {


GridLayoutDemo app = new GridLayoutDemo();
app.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ){
System.exit( 0 );
}
} );
}
}

54
titlu

Laborator 3 Aplicatii Java

Probleme rezolvate

1. Fisierul se numeste testSchimbareCulori.java:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class SchimbareCulori extends JFrame implements ActionListener


{
Container x;
SchimbareCulori(String titlu)
{
super(titlu);
setBounds(100,100,300,180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = getContentPane();
x.setLayout(null);
JButton b1 = new JButton("Rosu");
b1.setBounds(10,10,100,25);
b1.addActionListener(this);
x.add(b1);
JButton b2 = new JButton("Verde");
b2.setBounds(10,45,100,25);
b2.addActionListener(this);
x.add(b2);
JButton b3 = new JButton("Albastru");
b3.setBounds(10,80,100,25);
b3.addActionListener(this);
x.add(b3);
JButton b4 = new JButton("Gri");
b4.setBounds(10,115,100,25);
b4.addActionListener(this);
x.add(b4);
setVisible(true);
}
public void actionPerformed(ActionEvent ev)
{
String t = ev.getActionCommand();
if(t.compareTo("Rosu")==0)

55
titlu

x.setBackground(Color.RED);
if(t.compareTo("Verde")==0)
x.setBackground(Color.GREEN);
if(t.compareTo("Albastru")==0)
x.setBackground(Color.BLUE);
if(t.compareTo("Gri")==0)
x.setBackground(new Color(236,236,236));
}
}

public class testSchimbareCulori


{
public static void main(String arg[])
{
SchimbareCulori f = new SchimbareCulori("Schimba culoarea
de fundal");
}
}

2. Fisierul se numeste testCasetaCombo.java:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class CasetaCombo extends JFrame implements ActionListener


{
JComboBox lista;
CasetaCombo(String titlu)
{
super(titlu);
setBounds(100,100,300,135);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container x = getContentPane();
x.setLayout(null);
JLabel et = new JLabel("Alege discplina preferata");
et.setBounds(20,10,160,20);
x.add(et);
lista = new JComboBox();
lista.addItem("Programarea calculatoarelor");
lista.addItem("Proiectarea Algoritmilor");
lista.addItem("Programare orientata pe obiecte");

56
titlu

lista.addItem("Baze de date");
lista.addItem("Proiectarea bazelor de date");
lista.addItem("Tehnologii web");
lista.addItem("Aplicatii Java");
lista.addItem("Alta disciplina");
lista.setBounds(170,10,100,20);
x.add(lista);
JButton b1 = new JButton("Arata alegerea");
b1.setBounds(75,60,150,25);
b1.addActionListener(this);
x.add(b1);
setVisible(true);
}

public void actionPerformed(ActionEvent ev)


{
String t = (String)lista.getSelectedItem();
JOptionPane.showMessageDialog(this,"Ai ales "+t);
}
}

public class testCasetaCombo


{
public static void main(String arg[])
{
CasetaCombo f = new CasetaCombo("Caseta combo: ");
}
}

3. Fisierul se numeste testButonRadio.java:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

class ButonRadio extends JFrame implements ActionListener


{
ButtonGroup bg;
ButonRadio(String titlu)
{
super(titlu);

57
titlu

setBounds(100,100,300,180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container x = getContentPane();
x.setLayout(null);
JLabel l1 = new JLabel("Selecteaza discplina preferata...");
l1.setBounds(10,10,200,15);
x.add(l1);
JRadioButton rb1 = new JRadioButton("Programare");
rb1.setBounds(20,30,100,15);
x.add(rb1);
JRadioButton rb2 = new JRadioButton("Algebra",true);
rb2.setBounds(20,50,100,15);
x.add(rb2);
JRadioButton rb3 = new JRadioButton("Analiza
matematica");
rb3.setBounds(20,70,100,15);
x.add(rb3);
JRadioButton rb4 = new JRadioButton("Fizica");
rb4.setBounds(20,90,100,15);
x.add(rb4);
JButton b1 = new JButton("Ce-am selectat?");
b1.setBounds(75,120,150,25);
b1.addActionListener(this);
x.add(b1);
bg = new ButtonGroup();
bg.add(rb1); bg.add(rb2);
bg.add(rb3); bg.add(rb4);
setVisible(true);
}
public void actionPerformed(ActionEvent ev)
{
String s="";
Enumeration en = bg.getElements();
while(en.hasMoreElements())
{
JRadioButton rb = (JRadioButton)en.nextElement();
if(rb.isSelected() ) s = s + rb.getText()+" ";
}
JOptionPane.showMessageDialog(this,"Ai selectat
disciplinele: \n"+s);
}
}

58
titlu

public class testButonRadio


{
public static void main(String arg[])
{
ButonRadio f = new ButonRadio("Butoane radio: ");
}
}

2. Exceptii in Java

1. Fisierul se numeste Exceptii_1.java:

import java.util.Scanner;

class Eroare15 extends Exception


{
Eroare15()
{
super("Numarul introdus nu este in intervalul [1,5]...");
}//eroare
}//class Eroare
public class Exceptii_1
{
public static int citire_numar() throws Eroare15
{
System.out.print("dati numarul natural = ");
int n = new Scanner(System.in).nextInt();
if (n>=1 && n<=5) return n;
else throw new Eroare15();
}
static public void main(String arg[])
{
try{
System.out.print(" Introdu un numar: ");
int numar = citire_numar();
System.out.println(" Numarul citit este: "+numar);
}
catch(Eroare15 er)
{

59
titlu

System.out.println(" Exceptie: "+er.getMessage());


}
catch(NumberFormatException er)
{
System.out.println(" Exceptie: Valoarea introdusa nu
poate fi considerata numar intreg");
}
}
}

2. Fisierul se numeste Exceptii_2.java:

import java.util.*;

class Alfanumeric extends RuntimeException


{
String mesaj()
{
return "Sirul nu este alfabetic....";
}
}

public class Exceptii_2


{
static String citSirAlfa()
{
String sir;
Scanner in = new Scanner(System.in);
sir = in.nextLine();
boolean gasit = false;
for(int i=0; i<sir.length(); i++)
if ( (sir.charAt(i)<'A' || sir.charAt(i)<'Z') &&
(sir.charAt(i)<'a' || sir.charAt(i)<'z') && sir.charAt(i)!='
')
gasit=true;
if (gasit)
throw new Alfanumeric();
else return sir;
}
static public void main(String arg[])
{

60
titlu

boolean corect = false;


try{
System.out.print(" Introdu un sir de caractere: ");
String s = citSirAlfa();
System.out.println(" sirul citit este: "+s);
}
catch(Alfanumeric er)
{
System.out.println(" Exceptie: "+er.mesaj());
}
}
}

3. Fisierul se numeste Exceptii_3.java:

import java.util.*;
class Eroare extends Exception
{
Eroare(String mesaj)
{
super(mesaj);
}
}

class Fractie
{
int numitor, numarator;
Fractie(int n, int m) throws Eroare
{
numarator = n;
if (m!=0) numitor=m;
else throw new Eroare("Numitorul nu poate fi ZERO");
}

Fractie adunare(Fractie f) throws Eroare


{
int n=numarator*f.numitor + f.numarator*numitor;
int m=numitor*f.numitor;
return new Fractie(n,m);
}

61
titlu

void afisare()
{
System.out.println(" "+numarator+"/"+numitor+" ");
}
}

public class Exceptie_3


{
static public void main(String arg[])
{
try{
System.out.print(" Introdu un numaratorul primei
fractii: ");
int n = new Scanner(System.in).nextInt();
System.out.print(" Introdu un numitorul primei fractii:
");
int m = new Scanner(System.in).nextInt();
Fractie f1 = new Fractie(n,m);
System.out.print(" Introdu un numaratorul celei de-a
doua fractii: ");
int n = new Scanner(System.in).nextInt();
System.out.print(" Introdu un numitorul celei de-a doua
fractii: ");
int m = new Scanner(System.in).nextInt();
Fractie f2 = new Fractie(n,m);
System.out.print("Suma celor doua fractii este :");
f1.adunare(f2).afisare();
}
catch(Eroare er)
{
System.out.println(" Exceptie: "+er.getMessage());
}
}
}

62
titlu

Probleme propuse spre rezolvare

1. Adugai programului 3 alte metode care permit calculul diferenei,


produsului i mpririi a doua fracii.

2. Se se scrie un program care implementeaz principalele operaii aritmetice


pentru numerele complexe (adunare, scdere, nmulire, mprire). Coeficienii
numerelor complexe vor fi numere reale.

63