Hvad er en for-hver-løkke?

En for-each er en slags for- løkke, som du bruger, når du skal behandle alle elementerne i et array eller en samling. Når det er sagt, bruges udtrykket for-each faktisk ikke i denne løkke. Dens syntaks er som følger:

for (type itVar : array) 
{ 
    // Operations
}
Hvor type er typen af ​​iteratorvariablen (som matcher datatypen for elementer i arrayet!), er itVar dens navn, og array er et array (andre datastrukturer er også tilladt, f.eks. en form for samling, som ArrayList ), dvs. det objekt, som løkken udføres på. Som du kan se, bruger denne konstruktion ikke en tæller: Iteratorvariablen itererer simpelthen over elementerne i arrayet eller samlingen. Når en sådan løkke udføres, tildeles iteratorvariablen sekventielt værdien af ​​hvert element i arrayet eller samlingen, hvorefter den specificerede blok af sætninger (eller sætningen) udføres.

Ud over for-each-løkken har Java også en forEach()-metode. Du kan læse om det i artiklen med titlen "Stop med at skrive loops!" Top 10 bedste praksis for at arbejde med samlinger i Java 8

Bemærk:en for-each- løkke kan anvendes på arrays og alle klasser, der implementerer java.lang.Iterable- grænsefladen. Følgende for loop ville svare til koden ovenfor:

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

Eksempel på en for-hver-løkke

Vi opretter en række elevresultater. Derefter bruger vi en for-hver- løkke til at udskrive alle estimaterne, beregne den gennemsnitlige score og finde topscore.

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

}
Program output:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Lad os nu se, hvordan en metode til at udskrive alle partiturerne ville se ud, hvis vi brugte en almindelig for- løkke:

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();
    }
Hvis vi kalder denne metode fra hovedmetoden , får vi dette resultat:

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

Eksempel på en for-hver-løkke med samlinger

Vi opretter en samling af navne og viser alle navnene på skærmen.

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

Begrænsninger af en for-hver-løkke

For -hver- løkkens kompakte form anses for at være lettere at læse end en for- løkke, og det anses for bedste praksis at bruge en for-hver- løkke, hvor det er muligt. En for-hver- løkke er imidlertid en mindre universel konstruktion end en almindelig for- løkke. Her er nogle simple tilfælde, hvor en for-hver- løkke enten slet ikke virker eller vil fungere, men kun med besvær.
  1. Hvis du vil løbe gennem en løkke fra slutningen til begyndelsen. Det vil sige, at der ikke er nogen for-hver sløjfe, der er en direkte analog til følgende kode:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each er ikke egnet, hvis du vil foretage ændringer i et array. For eksempel kan du ikke sortere et array uden at ændre placeringen af ​​dets elementer. Derudover vil kun iteratorvariablen i den følgende kode ændre sig, ikke elementet i arrayet:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Hvis du leder efter et element i et array, og du skal returnere (eller videregive) indekset for det element, du leder efter, så er det bedre at bruge en almindelig for loop.

En nyttig video om for-hver-løkken

Sløjfer i CodeGym kurset

På CodeGym begynder vi at øve os i at bruge loops på niveau 4 i Java Syntax-questen . Flere af lektionerne på det niveau, såvel som mange af opgaverne på forskellige niveauer, er helliget loops for at styrke dine færdigheder i at arbejde med dem. Dybest set er der ingen måde, du kan undslippe dem - loops er en af ​​de vigtigste konstruktioner i programmering.

Mere information om for-hver og andre sløjfer

  1. Mens udtalelsen . Artiklen handler om den enkleste form for løkke: whileløkken, som CodeGym bruger til at introducere løkker til eleverne.
  2. Stop med at skrive loops! Top 10 bedste praksis for at arbejde med samlinger i Java 8 . Denne artikel vil hjælpe CodeGym-studerende, der er mindst halvvejs gennem kurset, med at lære mange interessante ting om at arbejde med samlinger.