Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Definirea si utilizarea de vectori in Java

java



+ Font mai mare | - Font mai mic



Definirea si utilizarea de vectori in Java

Cuvantul "vector" este folosit aici ca echivalent pentru "array" din limba engleza si se refera la un tip de date implicit limbajelor C, C++ si Java. Acest tip este diferit de tipul definit de clasa JDK Vector (vectori ce se pot extinde automat) si de aceea vom folosi si denumirea de vector intrinsec (limbajului) pentru vectori ca cei din C.



In Java, declararea unei variabile (sau unui parametru formal) de un tip vector se poate face in doua moduri, echivalente:

tip nume [ ]; // la fel ca in C si C++

tip [ ] nume; // specific Java

Declararea matricelor (vectori de vectori) poate avea si ea doua forme. Exemplu:

int a[ ][ ] ; // o matrice de intregi

int [ ][ ] b; // alta matrice de intregi

In Java nu este permisa specificarea unor dimensiuni la declararea unor vectori sau matrice, deoarece alocarea de memorie nu se face niciodata la compilare. Exemplu de eroare:

int a[100]; // corect: int a[] = new int[100];

O variabila vector este automat in Java o variabila referinta iar memoria trebuie alocata dinamic pentru orice vector. Alocarea de memorie pentru un vector se face folosind operatorul new urmat de un nume de tip si de o expresie (cu rezultat intreg) intre paranteze drepte; expresia determina numarul de componente (nu de octeti !) pe care le poate contine vectorul. Exemple:

float x[ ] = new float [10]; // aloca memorie ptr 10 reali

int n=10;

byte[ ][ ] graf = new byte [n][n];

Este posibila si o alocare automata, atunci cand vectorul este initializat la declarare cu un sir de valori. Exemplu:

short prime[ ] = ;

In lipsa unei initializari explicite, componentele unui vector sunt initializate automat, cu valori ce depind de tipul lor: zerouri pentru elemente numerice, null pentru variabile referinta de orice tip.

Un vector intrinsec cu componente de un anumit tip este considerat ca un obiect de un tip clasa, tip recunoscut de compilator dar care nu este definit explicit in nici un pachet de clase. Numele acestor clase este format din caracterul '[' urmat de o litera ce depinde de tipul componentelor vectorului: [I pentru int[], [B pentru byte[], [Z pentru boolean[], [C pentru char[], [F pentru float[] s.a.m.d.

Variabila predefinita cu numele length poate fi folosita ( ca membru al claselor vector ) pentru a obtine dimensiunea alocata pentru un vector ("capacitatea vectorului"). Exemplu:

// functie de copiere a unui vector

public static void copyVec ( int a [ ] ,int b[ ] )

De retinut ca length este dimensiunea alocata si nu dimensiunea efectiva a unui vector, iar numarul de elemente din vector se transmite ca argument la functii, atunci cand difera de capacitatea sa.

In Java, se verifica automat, la executie, incadrarea indicilor intre limitele declarate; iesirea din limite produce o exceptie si terminarea programului. Exemplu:

int [ ] a= new int [10];

for (int i=1;i<=10;i++)

a[i]=i; // exceptie la a[10]=10

Numerotarea componentelor unui vector este de la zero la (length-1), deci in exemplul anterior se produce exceptia de depasire a limitelor la valoarea i=10 .

Variabila length nu trebuie confundata cu metoda 'length()' din clasa String. Functia urmatoare determina sirul cel mai lung dintr-un vector de siruri:

static String maxLen ( String v[ ])

Din versiunea 5 se poate itera printr-un vector la fel ca si printr-uo colectie de obiecte folosind un ciclu de forma:

for ( tip ob: a) // "tip" este tipul elementelor vectorului a

cu semnificatia: "repeta ceva pentru fiecare valoare a variabilei "ob" din vectorul "a", atribuind succesiv lui "ob" valorile din vectorul "a" (valori ce pot fi de un tip primitiv sau de un tip clasa).

Functia care determina sirul de lungime maxima dintr-un vector de siruri se poate scrie astfel:

static String maxLen ( String v[ ])

O matrice este privita si in Java ca un vector de vectori, iar variabila 'length' se poate folosi pentru fiecare linie din matrice, pentru a determina numarul de coloane.

Deoarece orice matrice este alocata dinamic, nu exista probleme la transmiterea unei matrice ca argument la o functie. Nu este necesara transmiterea dimensiunilor matricei la o functie daca matricea este ocupata complet (la capacitatea ei). Exemplu:

class Matrice

}

public static void main (String [ ] arg) , };

printmat (mat);

}

}

O functie poate avea un rezultat de un tip vector (sau matrice).

In Java, ca si in C, transmiterea parametrilor se face prin valoare, adica se copiaza valorile parametrilor efectivi in parametrii formali corespunzatori, inainte de executia functiei. Deci o functie Java nu poate transmite rezultate prin argumente de un tip primitiv, dar poate modifica componentele unui vector primit ca argument. Exemplu:

// creare vector cu divizorii unui intreg

static int divizori (int n, int d[ ])

// utilizare functie

int div[ ]= new int [m]; // aloca memorie ptr vector divizori

int nd = divizori (m, div); // completare vector divizori

Clasa Arrays din pachetul "java.util" reuneste functii pentru operatii uzuale cu vectori avand elemente de orice tip (primitiv sau clasa): afisare, sortare, cautare s.a. Exemplu:

import java.util.Arrays;

class ExArrays ; // un vector de siruri

Arrays.sort (t); // ordonare vector t

System.out.println ( Arrays.toString(t)); // afisare vector

int k = Arrays.binarySearch (t, '3'); // cautare in vector ordonat

float x[ ] = ; // un vector de numere reale

Arrays.sort (x); printVec(x); // ordonare vector x

float y[ ] = (float[ ]) x.clone(); // y este o copie a vectorului x

System.out.println ( Arrays.equals (x,y)); // scrie 'true'

}

}

Din versiunea 5 s-au adaugat clasei Arrays metode statice pentru transformarea in sir de caractere a continutului unui vector intrinsec unidimensional sau multidimensional cu elemente de orice tip primitiv sau de tip Object. Exemplu de folosire:

double [ ] a= ;

System.out.println ( Arrays.toString(a));

Double b[ ][ ]= , , };

System.out.println(Arrays.deepToString(b));



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2962
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved