Ingineria Sistemelor de Programe

Documentatie suplimentara, ISP, Seria B si SM

View on GitHub

Tipuri Primitive de Date și Array-uri

Tipuri primitive de date în Java

Java este un limbaj de programare puternic tipizat, ceea ce înseamnă că fiecare variabilă trebuie să aibă un tip de date declarat.

Cele 8 tipuri primitive

Tip Dimensiune Valori Valoare implicită Exemplu
byte 8 biți -128 la 127 0 byte varsta = 25;
short 16 biți -32,768 la 32,767 0 short populatie = 10000;
int 32 biți -2^31 la 2^31-1 0 int numere = 123456;
long 64 biți -2^63 la 2^63-1 0L long distanta = 9876543210L;
float 32 biți Aproximativ ±3.40282347E+38F 0.0f float temperatura = 36.6f;
double 64 biți Aproximativ ±1.79769313486231570E+308 0.0d double PI = 3.14159265359;
char 16 biți 0 la 65,535 ‘\u0000’ char litera = 'A';
boolean 1 bit true sau false false boolean esteCorect = true;

Caracteristici ale tipurilor primitive

Exemple de declarare și inițializare

// Declarare
int numar;
double medie;

// Inițializare
numar = 10;
medie = 8.75;

// Declarare și inițializare în același timp
int varsta = 20;
char gen = 'M';
boolean esteStudent = true;

Conversii între tipuri primitive (casting)

Conversii implicite (widening)

byte b = 100;
int i = b;  // Un byte poate fi automat convertit la int

Conversii explicite (narrowing)

int i = 100;
byte b = (byte)i;  // Necesită cast explicit

Array-uri în Java

Array-urile sunt structuri de date care stochează mai multe valori de același tip.

Caracteristici ale array-urilor

Declarare și inițializare a array-urilor

Unidimensionale

// Declarare
int[] numere;
String[] nume;

// Creare (alocare memorie)
numere = new int[5];  // Array de 5 elemente de tip int
nume = new String[3];  // Array de 3 elemente de tip String

// Declarare și creare în același timp
double[] preturi = new double[10];

// Declarare, creare și inițializare cu valori specifice
char[] vocale = {'a', 'e', 'i', 'o', 'u'};
int[] puncte = {10, 20, 30, 40, 50};

Multidimensionale

// Declarare și creare
int[][] matrice = new int[3][4];  // Matrice 3x4

// Declarare, creare și inițializare
int[][] tabla = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

Accesarea elementelor dintr-un array

int[] numere = {10, 20, 30, 40, 50};

// Accesarea elementelor
int primulElement = numere[0];  // 10
int ultimulElement = numere[4];  // 50

// Modificarea valorilor
numere[2] = 35;  // Acum array-ul este {10, 20, 35, 40, 50}

Parcurgerea array-urilor

Folosind bucla for tradițională

int[] numere = {10, 20, 30, 40, 50};

for (int i = 0; i < numere.length; i++) {
    System.out.println("Elementul " + i + ": " + numere[i]);
}

Folosind bucla for-each (enhanced for)

int[] numere = {10, 20, 30, 40, 50};

for (int numar : numere) {
    System.out.println("Valoare: " + numar);
}

Manipularea array-urilor cu clasa Arrays

Java oferă clasa utilitară java.util.Arrays pentru diverse operații pe array-uri:

import java.util.Arrays;

int[] numere = {30, 10, 50, 20, 40};

// Sortare
Arrays.sort(numere);  // Acum array-ul este {10, 20, 30, 40, 50}

// Căutare binară (doar în array-uri sortate)
int pozitie = Arrays.binarySearch(numere, 30);  // Returnează 2

// Umplere cu o valoare
Arrays.fill(numere, 0);  // Acum array-ul este {0, 0, 0, 0, 0}

// Comparare
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
boolean suntEgale = Arrays.equals(a, b);  // true

// Conversie la String
String sir = Arrays.toString(numere);  // "[0, 0, 0, 0, 0]"

Exemplu complet

public class ExempluTipuriSiArrayuri {
    public static void main(String[] args) {
        // Tipuri primitive
        int varsta = 20;
        double medie = 9.5;
        char grupa = 'A';
        boolean absolvent = false;
        
        System.out.println("Vârsta: " + varsta);
        System.out.println("Media: " + medie);
        System.out.println("Grupa: " + grupa);
        System.out.println("Absolvent: " + absolvent);
        
        // Array de numere
        int[] note = {8, 9, 10, 7, 9};
        
        // Calcularea sumei și mediei notelor
        int suma = 0;
        for (int nota : note) {
            suma += nota;
        }
        double mediaNote = (double) suma / note.length;
        
        System.out.println("\nNotele: " + Arrays.toString(note));
        System.out.println("Media notelor: " + mediaNote);
        
        // Array bidimensional - orar săptămânal
        String[][] orar = {
            {"Matematică", "Fizică", "Informatică"},
            {"Engleză", "Istorie", "Sport"},
            {"Programare", "Baze de date", "Rețele"}
        };
        
        System.out.println("\nOrarul pentru primele 3 zile:");
        for (int i = 0; i < orar.length; i++) {
            System.out.print("Ziua " + (i + 1) + ": ");
            for (int j = 0; j < orar[i].length; j++) {
                System.out.print(orar[i][j]);
                if (j < orar[i].length - 1) {
                    System.out.print(", ");
                }
            }
            System.out.println();
        }
    }
}

Sfaturi pentru folosirea tipurilor primitive și a array-urilor

  1. Alegeți întotdeauna tipul primitiv potrivit pentru a economisi memorie
  2. Folosiți final pentru constantele care nu se vor schimba
  3. Verificați întotdeauna limitele array-ului pentru a evita excepțiile ArrayIndexOutOfBoundsException
  4. Folosiți Arrays.toString() pentru afișarea rapidă a conținutului unui array
  5. În aplicații reale, considerați folosirea colecțiilor (ArrayList, HashMap) în locul array-urilor simple pentru mai multă flexibilitate

Exerciții practice

  1. Creați un array de 5 numere întregi și calculați suma lor
  2. Creați un array de string-uri cu numele prietenilor voștri și afișați-le în ordine alfabetică
  3. Creați o matrice 3x3 de numere întregi și calculați suma pe diagonala principală
  4. Implementați un program care inversează elementele unui array
  5. Creați un program care găsește elementul maxim și minim dintr-un array de numere