CodeGym /Blog Java /Aleatoriu /Pentru fiecare buclă în Java
John Squirrels
Nivel
San Francisco

Pentru fiecare buclă în Java

Publicat în grup

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

Notă:o buclă for-each poate fi aplicată matricelor și oricăror clase care implementează interfața java.lang.Iterable . Următoarele bucle for ar fi echivalente cu codul de mai sus:

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.
  1. 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]);
    }
    
  2. 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++; 
    }
    
  3. 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 CodeGym

Pe 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

  1. 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.
  2. 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.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION