CodeGym /Java blogg /Slumpmässig /För varje slinga i Java
John Squirrels
Nivå
San Francisco

För varje slinga i Java

Publicerad i gruppen

Vad är en för varje slinga?

En for-each är en slags for- loop som du använder när du behöver bearbeta alla element i en array eller samling. Som sagt, frasen for-each används faktiskt inte i denna loop. Dess syntax är följande:

for (type itVar : array) 
{ 
    // Operations
}
Där type är typen av iteratorvariabeln (som matchar datatypen för element i arrayen!), är itVar dess namn och array är en array (andra datastrukturer är också tillåtna, till exempel någon form av samling, som ArrayList ), dvs objektet på vilket slingan exekveras. Som du kan se använder den här konstruktionen inte en räknare: iteratorvariabeln itererar helt enkelt över elementen i arrayen eller samlingen. När en sådan slinga exekveras, tilldelas iteratorvariabeln sekventiellt värdet för varje element i arrayen eller samlingen, varefter det specificerade blocket av satser (eller sats) exekveras.

Förutom for-each-loopen har Java även en forEach()-metod. Du kan läsa om det i artikeln med rubriken "Sluta skriv loopar!" Topp 10 bästa metoder för att arbeta med samlingar i Java 8

Notera:en slinga för varje kan appliceras på arrayer och alla klasser som implementerar java.lang.Iterable -gränssnittet. Följande för loop skulle motsvara koden ovan:

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

Exempel på en slinga för varje

Vi skapar en rad studentpoäng. Sedan använder vi en för varje slinga för att skriva ut alla uppskattningar, beräkna medelpoängen och hitta topppoängen.

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

}
Programutgång:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Låt oss nu se hur en metod för att skriva ut alla noter skulle se ut om vi använde en vanlig för loop:

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();
    }
Om vi ​​kallar den här metoden från huvudmetoden får vi detta resultat:

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

Exempel på en för varje slinga med samlingar

Vi skapar en samling namn och visar alla namn 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änsningar för en för varje slinga

For -each- loopens kompakta form anses vara lättare att läsa än en for- loop, och det anses vara bästa praxis att använda en for-each- loop när det är möjligt. En för varje slinga är dock en mindre universell konstruktion än en vanlig for- loop. Här är några enkla fall där en för varje slinga antingen inte fungerar alls eller fungerar, men bara med svårighet.
  1. Om du vill springa genom en slinga från slutet till början. Det vill säga, det finns ingen för varje slinga som är en direkt analog till följande kod:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each är inte lämpligt om du vill göra ändringar i en array. Du kan till exempel inte sortera en array utan att ändra platsen för dess element. Dessutom, i följande kod kommer bara iteratorvariabeln att ändras, inte elementet i arrayen:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Om du letar efter ett element i en array och du behöver returnera (eller vidarebefordra) indexet för elementet du letar efter, då är det bättre att använda en vanlig for- loop .

En användbar video om slingan för varje

Slingor i CodeGym-kursen

På CodeGym börjar vi öva på att använda loopar på nivå 4 i Java Syntax-uppdraget . Flera av lektionerna på den nivån, liksom många av uppgifterna på olika nivåer, ägnas åt loopar för att stärka dina färdigheter i att arbeta med dem. I grund och botten finns det inget sätt du kan undgå dem - loopar är en av de viktigaste konstruktionerna i programmering.

Mer information om for-each and other loops

  1. The while uttalande . Artikeln handlar om den enklaste typen av loop: whileloopen, som CodeGym använder för att introducera loopar för studenter.
  2. Sluta skriva loopar! Topp 10 bästa metoder för att arbeta med samlingar i Java 8 . Den här artikeln kommer att hjälpa CodeGym-studenter som är minst halvvägs genom kursen att lära sig många intressanta saker om att arbeta med samlingar.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION