CodeGym /Java Blog /Willekeurig /Voor elke lus in Java
John Squirrels
Niveau 41
San Francisco

Voor elke lus in Java

Gepubliceerd in de groep Willekeurig

Wat is een for-each-lus?

Een for-elk is een soort for- lus die u gebruikt wanneer u alle elementen van een array of verzameling moet verwerken. Dat gezegd hebbende, wordt de frase for-each eigenlijk niet gebruikt in deze lus. De syntaxis is als volgt:

for (type itVar : array) 
{ 
    // Operations
}
Waar type het type is van de iteratorvariabele (die overeenkomt met het datatype van elementen in de array!), itVar de naam is, en array een array is (andere datastructuren zijn ook toegestaan, bijvoorbeeld een soort verzameling, zoals ArrayList ), dwz het object waarop de lus wordt uitgevoerd. Zoals u kunt zien, gebruikt deze constructie geen teller: de iteratorvariabele herhaalt eenvoudigweg de elementen van de array of verzameling. Wanneer zo'n lus wordt uitgevoerd, wordt aan de iteratorvariabele achtereenvolgens de waarde van elk element van de array of verzameling toegewezen, waarna het gespecificeerde blok met statements (of statement) wordt uitgevoerd.

Naast de for-each-lus heeft Java ook een forEach()-methode. Je leest erover in het artikel "Stop met loops schrijven!" Top 10 best practices voor het werken met collecties in Java 8

Opmerking:een for-each- lus kan worden toegepast op arrays en alle klassen die de java.lang.Iterable -interface implementeren. De volgende for- lus zou gelijk zijn aan de bovenstaande code:

for (int i=0; i < array.length; i++) 
{ 
    
    // Statements 
}

Voorbeeld van een for-each-lus

We maken een reeks studentenscores. Vervolgens gebruiken we een for-each- lus om alle schattingen af ​​te drukken, de gemiddelde score te berekenen en de hoogste score te vinden.

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));
    }

}
Programma-uitvoer:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Laten we nu eens kijken hoe een methode voor het afdrukken van alle partituren eruit zou zien als we een gewone for- lus zouden gebruiken:

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();
    }
Als we deze methode vanuit de hoofdmethode aanroepen , krijgen we dit resultaat:

All the scores: |5|10|7|8|9|9|10|12|

Voorbeeld van een for-each-lus met collecties

We maken een verzameling namen en tonen alle namen op het scherm.

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);
        }

Beperkingen van een for-each-lus

De compacte vorm van de for-each- lus wordt beschouwd als gemakkelijker te lezen dan een for- lus, en het wordt als best practice beschouwd om waar mogelijk een for-each- lus te gebruiken . Een for-each- lus is echter een minder universele constructie dan een gewone for- lus. Hier zijn enkele eenvoudige gevallen waarin een for-each- lus helemaal niet werkt of wel werkt, maar alleen met moeite.
  1. Als je een lus van het einde naar het begin wilt doorlopen. Dat wil zeggen, er is geen for-each- lus die een directe analoog is aan de volgende code:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each is niet geschikt als u wijzigingen in een array wilt aanbrengen. U kunt bijvoorbeeld een array niet sorteren zonder de locatie van de elementen te wijzigen. Bovendien verandert in de volgende code alleen de iteratorvariabele, niet het element van de array:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Als je een element in een array zoekt en je moet de index van het gezochte element teruggeven (of doorgeven), dan kun je beter een gewone for-lus gebruiken .

Een handige video over de for-each-lus

Loops in de CodeGym-cursus

Op CodeGym beginnen we te oefenen met loops op niveau 4 van de Java Syntax-quest . Verschillende lessen op dat niveau, evenals veel van de taken op verschillende niveaus, zijn gewijd aan lussen om je vaardigheden om ermee te werken te versterken. Kortom, er is geen manier om eraan te ontsnappen - loops zijn een van de belangrijkste constructies bij het programmeren.

Meer informatie over for-each en andere loops

  1. De while-verklaring . Het artikel gaat over de eenvoudigste loop: de whileloop, die CodeGym gebruikt om loops te introduceren bij studenten.
  2. Stop met het schrijven van loops! Top 10 best practices voor het werken met collecties in Java 8 . Dit artikel helpt CodeGym-studenten die minstens halverwege de cursus zijn, veel interessante dingen te leren over het werken met verzamelingen.
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION