CodeGym /Java blog /Véletlen /For-each Java-ban
John Squirrels
Szint
San Francisco

For-each Java-ban

Megjelent a csoportban

Mi az a for-each hurok?

A for-each egyfajta for ciklus, amelyet akkor használ, ha egy tömb vagy gyűjtemény összes elemét fel kell dolgozni. Ennek ellenére a for-each kifejezés valójában nem használatos ebben a ciklusban. A szintaxisa a következő:

for (type itVar : array) 
{ 
    // Operations
}
Ahol a type az iterátor változó típusa (amely megegyezik a tömb elemeinek adattípusával!), az itVar a neve, a tömb pedig egy tömb (más adatszerkezetek is megengedettek, például valamilyen gyűjtemény, mint az ArrayList ), azaz az objektum, amelyen a ciklus végrehajtódik. Amint láthatja, ez a konstrukció nem használ számlálót: az iterátor változó egyszerűen a tömb vagy a gyűjtemény elemei felett iterál. Egy ilyen ciklus végrehajtásakor az iterátorváltozóhoz szekvenciálisan hozzárendeljük a tömb vagy gyűjtemény minden elemének értékét, majd a megadott utasításblokk (vagy utasítás) végrehajtásra kerül.

A for-each cikluson kívül a Java-nak van egy forEach() metódusa is. Erről a "Hagyd abba a hurkok írását!" című cikkben olvashatsz. A 10 legjobb gyakorlat a gyűjteményekkel való munkavégzéshez Java 8-ban

Jegyzet:egy for-each ciklus alkalmazható tömbökre és bármely osztályra, amely megvalósítja a java.lang.Iterable felületet. A következő for ciklus egyenértékű a fenti kóddal:

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

Példa egy for-each ciklusra

Készítünk egy sor tanulói pontszámot. Ezután egy for-each ciklus segítségével kinyomtatjuk az összes becslést, kiszámítjuk az átlagos pontszámot, és megtaláljuk a legmagasabb pontszámot.

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 kimenet:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Most pedig nézzük meg, hogyan nézne ki egy módszer az összes pontszám kinyomtatására, ha egy közönséges for ciklust használnánk :

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();
    }
Ha ezt a metódust a fő módszerből hívjuk , akkor ezt az eredményt kapjuk:

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

Példa egy for-each ciklusra gyűjteményekkel

Létrehozunk egy névgyűjteményt, és az összes nevet megjelenítjük a képernyőn.

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

A for-each ciklus korlátai

A for-each ciklus kompakt formája könnyebben olvasható, mint a for ciklus, és a legjobb gyakorlatnak tekinthető az egyes ciklusok használata, ahol csak lehetséges. A for-each ciklus azonban kevésbé univerzális konstrukció, mint egy közönséges for ciklus. Íme néhány egyszerű eset, amikor egy for-each ciklus vagy egyáltalán nem, vagy fog működni, de csak nehezen.
  1. Ha egy hurkon keresztül akarsz futni a végétől az elejéig. Vagyis nincs olyan for-each ciklus, amely közvetlen analógja lenne a következő kóddal:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. A For-each nem megfelelő, ha módosítani akar egy tömböt. Például nem rendezhet egy tömböt anélkül, hogy megváltoztatná elemeinek helyét. Ezenkívül a következő kódban csak az iterátor változó változik, a tömb eleme nem:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Ha egy tömbben keres egy elemet, és vissza kell adnia (vagy tovább kell adnia) a keresett elem indexét, akkor jobb, ha egy közönséges for ciklust használ .

Hasznos videó a for-each ciklusról

Hurok a CodeGym tanfolyamon

A CodeGym-en elkezdjük gyakorolni a ciklusok használatát a Java Syntax küldetés 4. szintjén . Ezen a szinten számos leckét, valamint a különböző szinteken lévő feladatokat a hurkoknak szentelték annak érdekében, hogy megerősítsék a velük való munkavégzés készségeit. Alapvetően nincs mód tőlük elkerülni – a ciklusok az egyik legfontosabb konstrukció a programozásban.

További információ a for-each és a többi hurokról

  1. A while kijelentés . A cikk a ciklus legegyszerűbb fajtájáról szól: a whileciklusról, amelyet a CodeGym arra használ, hogy hurkokat mutasson be a diákoknak.
  2. Hagyd abba a hurkok írását! A 10 legjobb gyakorlat a gyűjteményekkel való munkához Java 8-ban . Ez a cikk abban segít, hogy a CodeGym hallgatói, akik legalább a kurzus felénél jártak, sok érdekes dolgot tanuljanak meg a gyűjteményekkel való munkáról.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION