For Each

O altă variantă pentru structura for învaţată este for each sau "enhanced for loop” folosită special pentru colecţiile de date pe care le parcurge element cu element. De exemplu, pentru a afişa elementele unui tablou din exemplul de la tablouri, putem scrie:

int[] tablou1 = new int[5];
// initializari
for (int x : tablou1) {
    System.out.println(x);
}

Atenţie: cu for-each nu mai avem acces la indexul pe care se află elementul pe care vrem să îl afişăm. Dar este indicat să folosim un for-each de fiecare dată când este posibil.

Exerciţii

1. Creaţi un vector de 10 elemente, puneţi valori pe toate poziţiile. La final afişaţi-l de două ori, folosind cele 2 for-uri diferite.

Solutie

Solutie

int[] numere = new int[10];
numere[0] = 58;
numere[1] = 59;
numere[2] = 60;
numere[3] = 115;
numere[4] = 226;
numere[5] = 427;
numere[6] = 528;
numere[7] = 629;
numere[8] = 1222;
numere[9] = 3245;

System.out.println("Afisare for clasic");

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

System.out.println("Afisare for-each");

for (int nr : numere) {
   System.out.println(nr);
}


2. Se citeşte un număr n care reprezintă lungimea unui vector. Creaţi vectorul de lungime n, puneţi valori aleatoare pe fiecare poziţie (între 1 şi 100) şi afişaţi vectorul.

Solutie

Solutie

Scanner keys = new Scanner(System.in);

System.out.println("Cate numere sa generam?");
int lungime = keys.nextInt();

int[] numere = new int[lungime];

// populare
for (int i = 0; i < lungime; i++) {
   int nr = (int) (Math.random() * 100 + 1);
   numere[i] = nr;
}

//afisarea arrayului
for (int i : numere) {
   System.out.println(i);
}


3. Creaţi un vector care reţine 1000 de valori. Puneţi în el valori aleatoare între 10 şi 99. Afişaţi vectorul, apoi afişaţi de câte ori apar numere cu 0 în coadă (ex: 10, 20, 30, etc…).

Solutie

Solutie

int numere[] = new int[1000];

int contorMultiplu10 = 0;

// populare
for (int i = 0; i < 1000; i++) {
   numere[i] = (int) (Math.random() * 90 + 10);
   System.out.println(numere[i]);
}

//afisarea arrayului
for (int i : numere) {
   System.out.println(i);
   if (i % 10 == 0) {
      //System.out.println(numere[i]);
      contorMultiplu10++;
   }
}

System.out.println( "Numere multiplu de 10 apar de " + contorMultiplu10 + " ori");


4. Creaţi un vector cu n numere aleatoare între 0 şi 99 (n introdus de la tastatură). Afişaţi vectorul, elementul minim, elementul maxim, suma elementelor, produsul elementelor diferite de 0, media aritmetică a elementelor.

Solutie

Solutie

Scanner keys = new Scanner(System.in);
System.out.println("Introduceti un numar: ");
int numere[] = new int[keys.nextInt()];

// populare
for (int i = 0; i < numere.length; i++) {
   numere[i] = (int) (Math.random() * 100);
}

// afisare
int numarMinim = numere[0];   // initializam la prima valoare din array si se va schimba pe masura ce parcurgem array-ul daca e cazul
int numarMaxim = numere[0];
long produs = 1L;  // daca ramane neinitializat, va avea valoarea default 0
                   // am folosit long in loc de int deoarece produsul va avea valori 
                   // mari chiar si pentru un array cu 10 elemente
int sumaElementePentruMedie = 0;
int contorPentruAfisare = 0;

for (int nr : numere) {
   
   System.out.println(contorPentruAfisare++ + ". " + nr);
   
   if (nr < numarMinim) numarMinim = nr;
   if (nr > numarMaxim) numarMaxim = nr;
   if (nr > 0) produs *= nr;
   sumaElementePentruMedie += nr;
   
}

System.out.println("Cel mai mic numar este: " + numarMinim);
System.out.println("Cel mai mare numar este: " + numarMaxim);
System.out.println("Produsul numerelor mai mari ca zero: " + produs);
System.out.println("Media tuturor numerelor: " + sumaElementePentruMedie/numere.length);


Schimbaţi programul astfel încât să afişaţi pe ce poziţie se află minimul si maximul.

Solutie

Solutie

// ...
int indexNumarMinim = 0;
int indexNumarMaxim = 0;

for (int nr : numere) {
   
   System.out.println(contorPentruAfisare + ". " + nr);
   
   if (nr < numarMinim) {
      numarMinim = nr;
      indexNumarMinim = contorPentruAfisare;
   }
   if (nr > numarMaxim) {
      numarMaxim = nr;
      indexNumarMaxim = contorPentruAfisare;
   }
   if (nr > 0) produs *= nr;
   sumaElementePentruMedie += nr;
   contorPentruAfisare++;
}

System.out.println("Cel mai mic numar este: " + numarMinim + " la pozitia " + indexNumarMinim);
System.out.println("Cel mai mare numar este: " + numarMaxim + " la pozitia " + indexNumarMaxim);
// ...


5. Creaţi un array de String ce conţine iniţializări pentru elemente la declarare. Afişaţi vectorul.

Solutie

Solutie

String nume[] = {"Traian", "Emil", "Ion", "Nicolae", "Klaus"};

for (String s : nume) {
   System.out.println(s);
}


Discussion

You could leave a comment if you were logged in.