Ce este o buclă pentru fiecare?
Un for-each este un fel de buclă for pe care o utilizați atunci când trebuie să procesați toate elementele unei matrice sau colecții. Acestea fiind spuse, expresia for-each nu este de fapt folosită în această buclă. Sintaxa sa este următoarea:
for (type itVar : array)
{
// Operations
}
Unde tip este tipul variabilei iteratoare (care se potrivește cu tipul de date al elementelor din matrice!), itVar este numele acestuia, iar array este o matrice (alte structuri de date sunt, de asemenea, permise, de exemplu, un fel de colecție, cum ar fi ArrayList ), adică obiectul pe care se execută bucla. După cum puteți vedea, acest construct nu folosește un numărător: variabila iteratoare pur și simplu iterează peste elementele matricei sau colecției. Când se execută o astfel de buclă, variabilei iteratoare i se atribuie secvenţial valoarea fiecărui element al matricei sau colecţiei, după care este executat blocul specificat de instrucţiuni (sau instrucţiune).
Pe lângă bucla for-each, Java are și o metodă forEach(). Puteți citi despre asta în articolul intitulat „Nu mai scrieți bucle!” Top 10 cele mai bune practici pentru lucrul cu colecții în Java 8 |
for (int i=0; i < array.length; i++)
{
// Statements
}
Exemplu de buclă pentru fiecare
Creăm o serie de scoruri ale studenților. Apoi folosim o buclă pentru fiecare pentru a tipări toate estimările, pentru a calcula scorul mediu și pentru a găsi scorul maxim.
public class ForEachTest {
// A method that prints all scores
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int num : scores) {
System.out.print(num + "|");
}
System.out.println();
}
// A method that displays the average score
public static double getAverageScore(int[] numbers) {
int totalScore = 0;
for (int num : numbers) {
totalScore = num + totalScore;
}
return ((double) totalScore / numbers.length);
}
// A method that determines the best (maximum) score
public static int getBestScore(int[] numbers) {
int maxScore = numbers[0];
for (int num : numbers) {
if (num > maxScore) {
maxScore = num;
}
}
return maxScore;
}
public static void main(String[] args) {
// Array of scores
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};
int bestScore = getBestScore(scores);
System.out.print("All the scores: ");
printAllScores(scores);
System.out.println("The highest score is " + bestScore);
System.out.println("The average score is " + getAverageScore(scores));
}
}
Ieșire program:
All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Acum, să vedem cum ar arăta o metodă de tipărire a tuturor scorurilor dacă am folosi o buclă for obișnuită :
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "|");
}
System.out.println();
}
Dacă numim această metodă din metoda principală , atunci obținem acest rezultat:
All the scores: |5|10|7|8|9|9|10|12|
Exemplu de buclă pentru fiecare cu colecții
Creăm o colecție de nume și afișăm toate numele pe ecran.
List<String> names = new ArrayList<>();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
Limitările unei bucle pentru fiecare
Forma compactă a buclei for-each este considerată mai ușor de citit decât o buclă for și este considerată cea mai bună practică de a folosi o buclă pentru fiecare ori de câte ori este posibil. Cu toate acestea, o buclă for-each este o construcție mai puțin universală decât o buclă for obișnuită. Iată câteva cazuri simple în care o buclă pentru fiecare fie nu va funcționa deloc, fie va funcționa, dar numai cu dificultate.-
Dacă vrei să alergi printr-o buclă de la sfârșit până la început. Adică, nu există nicio buclă pentru fiecare care să fie un analog direct cu următorul cod:
for (int i= array.length-1; i>0; i--) { System.out.println(array[i]); }
-
For-each nu este potrivit dacă doriți să faceți modificări la o matrice. De exemplu, nu puteți sorta o matrice fără a modifica locația elementelor sale. În plus, în următorul cod, doar variabila iterator se va schimba, nu elementul matricei:
for (int itVar : array) { itVar = itVar++; }
-
Dacă căutați un element într-o matrice și trebuie să returnați (sau să transmiteți) indexul elementului pe care îl căutați, atunci este mai bine să utilizați o buclă for obișnuită .
Un videoclip util despre bucla pentru fiecare
Bucle în cursul CodeGymPe CodeGym, începem să exersăm folosind bucle la nivelul 4 al misiunii de sintaxă Java . Câteva dintre lecțiile de la acel nivel, precum și multe dintre sarcinile de la diferite niveluri, sunt dedicate buclelor pentru a vă consolida abilitățile de a lucra cu ele. Practic, nu ai cum să scapi de ele - buclele sunt una dintre cele mai importante constructe din programare. |
Mai multe informații despre buclele for-each și altele
- Declarația while . Articolul se referă la cel mai simplu tip de buclă: bucla
while
, pe care CodeGym o folosește pentru a introduce bucle studenților. - Nu mai scrie bucle! Top 10 cele mai bune practici pentru lucrul cu colecții în Java 8 . Acest articol îi va ajuta pe studenții CodeGym care sunt cel puțin la jumătatea cursului să învețe multe lucruri interesante despre lucrul cu colecțiile.
GO TO FULL VERSION