Transcript
Page 1: Java – Tablouri si siruri

Java – Tablouri si siruri

Tablouri descriere creare unidimensional de primitive multidimensional de primitive unidimensional de obiecte

Siruri creare utilizare

Page 2: Java – Tablouri si siruri

Tablouri tabloul este o colectie de elemente de acelaşi tip

stocate pe heap (locul in care exista toate obiectele Java); tipul elementelor poate fi simplu (primitiv) sau

obiect; un element poate stoca o singura valoare; elementele se identifica unic printr-un numar întreg

numit indice; se zice că un tablou este multidimensional dacă foloseşte

mai mulţi indici pentru accesarea unui element de tablou; un tablou cu o singură dimensiune este cunoscut sub numele de "vector", iar unul cu două dimensiuni sub denumirea de "matrice".

numarul de elemente de tablou se fixeaza în momentul crearii acestuia (Java trebuie sa stie cat spatiu sa aloce pe heap);

Page 3: Java – Tablouri si siruri

Tablouri - creare termenii de constructie, creare sau instantiere a tabloului

se refera la stocarea tabloului pe heap; declararea tabloului se face prin specificarea tipului

elementelor, urmate de [] si numele tabloului, de exemplu: int [] a; aceasta linie insa nu aloca si spatiul de stocare pe heap;

crearea tabloului se face folosind operatorul new impreuna cu tipul si numarul de elemente: int [] a = new int[10]; se poate scrie in aceeasi linie cu declararea sau, separat, pe o linie urmatoare;

initializarea elementelor se face automat cu valori implicite (0 pentru tipurile numerice sau echivalent cu 0 pentru cele ne-numerice); initializarea cu valori ne-implicite se face prin enumerarea lor intre acolade, caz in care numarul de elemente se deduce din acolade.

Page 4: Java – Tablouri si siruri

Tablouri unidimesionale - prelucrare

int [] a = new int[10]; for(int i=0;i<10;++i) a[i]=i;

for (int i = 0; i < a.length; ++i) System.out.println(a[i]);

for (int element:a) System.out.println(element);

Elementele sunt numerotate de la 0 la 9. O metode de initializare a elementelor de tablou este ciclul for.Numarul elementelor este fixat si se poate gasi cu nume.length.

Parcurgerea se poate realiza si cu o constructie de limbaj mai noua in care nu este nevoie de indice. Variabila element din ciclu parcurge automat toata colectia de valori din tabloul a.

Page 5: Java – Tablouri si siruri

Tablouri bidimesionale - creare

un tablou multidimensional este un tablou de tablouri; pentru accesarea elementelor de folosesc mai multi indici; declararea si crearea unui tablou cu 2 dimensiuni ([rand][coloana]):

initializare:

declarare şi initializare fara specificarea numarului de coloane (variabil):

tip [][] numetablou = new tip[r][c];

int [][] a = new int[4][2];a[0][0] = 1;a[0][1] = 3;

int[][] a = {{1,3},{0,0},{0,0},{0,0}

};

tip [][] numetablou = new tip[r][];…numetablou[il] = new tip[c];

Page 6: Java – Tablouri si siruri

Tablouri bidimesionale - prelucrare

double [][] m = new double[5][7];for (int r = 0; r < 5; ++r)

for (int c = 0; c < 7; ++c) m[r][c] = r+c;

for (int r = 0; r < m.length; ++r) {for (int c = 0; c <m[r].length; ++c)

System.out.printf("%10.5f ",m[r][c]); System.out.println();}

for (double [] rand: m) {for (double element: rand)

System.out.printf("%10.5f ", element); System.out.println();}

Initializare.

Afisare cu metoda 1.

Afisare cu metoda 2.

Page 7: Java – Tablouri si siruri

Tablouri bidimesionale – cu numar variabil de coloanepublic class TabMulti { public static void main(String[] args) {

int k = 0; int tab2d [][] = new int [4][]; //4 randuri tab2d[0] = new int[5]; tab2d[1] = new int[2]; tab2d[2] = new int[4]; tab2d[3] = new int[7]; for(int i=0; i < tab2d.length; ++i) for(int j=0; j < tab2d[i].length; ++j) tab2d[i][j] = k++; for(int i=0; i < tab2d.length; ++i) { for(int j=0; j < tab2d[i].length; ++j) System.out.print(tab2d[i][j]+" "); System.out.println(); } }}

Page 8: Java – Tablouri si siruri

Tablouri de obiecteLucrul cu tablourile de obiecte este asemanator cu cel de

primitive: declarare creare initializare

Diferenta aparela initializare,aici obiecteletrebuie initializatefiecare in parte cu operatorul new,altfel ele nu exista(au valorea null).

//declararePunct puncte[];

//creare tablou de obiectepuncte = new Punct[3];

//initializarefor (int i = 0; i < puncte.length; ++i) { //initializarea obiectelor din tablou puncte[i] = new Punct(i, 2 * i);}

//afisarea elementelor de tabloufor (int i = 0; i < puncte.length; ++i) System.out.println(puncte[i]); for (Punct p:puncte) System.out.println(p);

Page 9: Java – Tablouri si siruri

Siruri sirul de caractere = o secventa de caractere de lungime arbitrară

cuprinsa intre ghilimele;

Java NU are implementat un tip primitiv şir de caractere; String este o clasă Java predefinită în pachetul java.lang.String

pentru manipularea şirurilor de caractere; are mai bine de 50 de metode; inspectarea acestora se face cel mai simplu utilizând documentaţia JDK (vezi pagina urmatoare);

compilatorul Java aloca spaţiu pentru literalii sir în memorie iar operatorul de atribuire va stoca adresa respectivă în variabila şir; din acest motiv, testarea egalitătii a două şiruri nu se poate face cu operatorul == ci cu o metoda dedicata numita equals;

sirurile nu pot fi modificate; desi unele operatii par sa faca aceasta in realitate se intoarce un nou obiect String

String s; //declararea unei variabile sirString sal = ”Salut”; //decl. cu initializare

Page 10: Java – Tablouri si siruri

Siruri - continuare

Page 11: Java – Tablouri si siruri

Siruri – metode uzualepublic class Siruri { public static void main(String[] args) { String s1, s2; String s3 = "Vasile"; //Vasile este un literal s2 ="Ion"; //Ion este un literal //concatenare s1 = s2 + s2; //lungimea unui sir de caractere System.out.println("Lungimea sirului: " +s1 +" este de " +s1.length()+" caractere"); //extagerea unui subsir System.out.println("Un subsir: " + s1.substring(0,3)); //editarea cu subsiruri s1 = s1.substring(0,3) + "-" + s1.substring(3,s1.length()); System.out.println("Editarea: " + s1); //testarea egalitatii sirurilor System.out.println("s1: " + s1+"\ns2: "+s2); System.out.println("Egalitatea lui s1 cu s2: " + s1.equals(s2)); System.out.println("Egalitatea lui Ion cu s2: " + "Ion".equals(s2)); /* comparatia sirurilor * intoarce < 0 daca s1 vine inainte de s2 in dictionar * intoarce 0 daca s1 si s2 sunt egale * intoarce > 0 daca s1 este dupa s2 in dictionar */ System.out.println("Compararea lui s1 cu s2: " + s1.compareTo(s2)); }}

Page 12: Java – Tablouri si siruri

Aplicatia 1Scrieti o aplicatie Java pentru citirea si afisarea elementelor unui tablou unidimensional a, de 5 elemente.

import java.util.Scanner;import javax.swing.*;public class TablouPrimitive { public static void main(String[] args) { final int NRELEM = 5; //lungimea tabloului int [] a; //declararea tabloului Scanner intrare; String iesire = "Indice\tValoarea element\n"; intrare = new Scanner(System.in); a = new int[NRELEM]; //crearea tabloului; //citire interactiva in mod text a elementelor de tablou for(int i = 0; i < a.length;++i) { System.out.print("a[" + i +"] = "); a[i]= intrare.nextInt(); //pt. cea de a 2-a metoda de afisare iesire+= i +"\t"+ a[i] + "\n"; //sir de iesire } //metoda 1: afisare simpla de elemente tablou for(int i = 0; i < a.length;++i) System.out.println(a[i]); //metoda 2: afisare cu fereastra de dialog JTextArea fereastraiesire = new JTextArea(); fereastraiesire.setText(iesire); JOptionPane.showMessageDialog(null,fereastraiesire,"indice - valoare tablou", JOptionPane.INFORMATION_MESSAGE); }}

Page 13: Java – Tablouri si siruri

Aplicatia 2/1// Sortarea crescatoare a unui tablou de intregiimport javax.swing.*;

public class sortTab { int a []; //tabloul int asort[]; //clona int n; //numarul de elemente de tablou sortTab(int nrel) { n = nrel; //tabloul initial a = new int[n]; //tabloul sortat asort = new int [n]; //generam aleator n numere de la 0 la 100 //de tipul int si le stocam in a for(int i=0; i<n ; ++i) a[i] = (int)(100*Math.random()); //copiem tabloul a in asort try { System.arraycopy(a,0,asort,0,n); } catch(ArrayStoreException e) { System.out.println(e); } }

Scrieti o aplicatie Java pentru sortarea crescatoare a elementelor unui tablou utilizand algoritmul bubblesort.

Page 14: Java – Tablouri si siruri

Aplicatia 2/2 //sortarea public void bubbleSort( ) { boolean esteinterschimbare = true; while (esteinterschimbare) { esteinterschimbare = false; for ( int i = 0; i < asort.length-1; ++i ) { if ( asort[i] > asort[i+1] ) { swap(asort,i,i+1); esteinterschimbare = true; } } } }

//interschimbarea a 2 elemente de tablou private void swap( int tablou[], int i, int j ) { int aux;

aux = tablou[i]; tablou[i] = tablou[j]; tablou[j] = aux; }

//afisare tablou initial public String afisare(String txt) { String rez; rez = txt; for (int i=0; i<a.length; ++i ) rez += " " + a[ i ]; return rez; } //afisarea tablou sortat public String afisaresort(String txt) { String rez; rez = txt; for (int i=0; i<asort.length; ++i )

rez += " " + asort[ i ]; return rez; }

Page 15: Java – Tablouri si siruri

Aplicatia 2/3public static void main(String args[]) { sortTab st; String rez; st = new sortTab(17);

rez = st.afisare("a - Tablou initial:\n"); st.bubbleSort(); // sortare tablou rez += st.afisaresort("\n\nasort - Tabloul cu elementele sortate:\n"); JTextArea ferRez = new JTextArea(); ferRez .setText( rez ); JOptionPane.showMessageDialog(null, rez, "Sortare crescatoare", JOptionPane.INFORMATION_MESSAGE); } }

Page 16: Java – Tablouri si siruri

Bibliografie

http://www.east.utcluj.ro/mb/mep/antal/downloads.html > Java: course, IDE (JDeveloper), JDK and JRE, JDeveloper labs.

http://docs.oracle.com/cd/E18941_01/tutorials/jdtut_11r2_50/jdtut_11r2_50.html > Getting Started With the JDeveloper IDE


Top Related