CodeGym /Java Blog /Random-IT /Ciclo for-each in Java
John Squirrels
Livello 41
San Francisco

Ciclo for-each in Java

Pubblicato nel gruppo Random-IT

Cos'è un ciclo for-each?

Un for-each è una sorta di ciclo for che si utilizza quando è necessario elaborare tutti gli elementi di un array o di una raccolta. Detto questo, la frase for-each non è effettivamente utilizzata in questo ciclo. La sua sintassi è la seguente:

for (type itVar : array) 
{ 
    // Operations
}
Dove type è il tipo della variabile iteratore (che corrisponde al tipo di dati degli elementi nell'array!), itVar è il suo nome e array è un array (sono consentite anche altre strutture di dati, ad esempio, una sorta di raccolta, come ArrayList ), ovvero l'oggetto su cui viene eseguito il ciclo. Come puoi vedere, questo costrutto non utilizza un contatore: la variabile iteratore itera semplicemente sugli elementi dell'array o della raccolta. Quando viene eseguito un tale ciclo, alla variabile iteratore viene assegnato in sequenza il valore di ciascun elemento dell'array o della raccolta, dopodiché viene eseguito il blocco di istruzioni (o istruzione) specificato.

Oltre al ciclo for-each, Java ha anche un metodo forEach(). Puoi leggerlo nell'articolo intitolato "Smettila di scrivere loop!" Le 10 migliori pratiche per lavorare con le raccolte in Java 8

Nota:un ciclo for-each può essere applicato agli array ea qualsiasi classe che implementa l' interfaccia java.lang.Iterable . Il seguente ciclo for sarebbe equivalente al codice precedente:

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

Esempio di ciclo for-each

Creiamo una matrice di punteggi degli studenti. Quindi usiamo un ciclo for-each per stampare tutte le stime, calcolare il punteggio medio e trovare il punteggio massimo.

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

}
Uscita del programma:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Ora, vediamo come sarebbe un metodo per stampare tutti gli spartiti se usassimo un normale ciclo for :

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();
    }
Se chiamiamo questo metodo dal metodo principale , otteniamo questo risultato:

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

Esempio di ciclo for-each con raccolte

Creiamo una raccolta di nomi e visualizziamo tutti i nomi sullo schermo.

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

Limitazioni di un ciclo for-each

La forma compatta del ciclo for-each è considerata più facile da leggere rispetto a un ciclo for ed è considerata la migliore pratica utilizzare un ciclo for-each ove possibile. Tuttavia, un ciclo for-each è un costrutto meno universale di un normale ciclo for . Ecco alcuni semplici casi in cui un ciclo for-each non funzionerà affatto o funzionerà, ma solo con difficoltà.
  1. Se vuoi eseguire un ciclo dalla fine all'inizio. Cioè, non esiste un ciclo for-each che sia un analogo diretto al seguente codice:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each non è adatto se si desidera apportare modifiche a un array. Ad esempio, non puoi ordinare un array senza cambiare la posizione dei suoi elementi. Inoltre, nel codice seguente, cambierà solo la variabile iteratore, non l'elemento dell'array:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Se stai cercando un elemento in un array e devi restituire (o trasmettere) l'indice dell'elemento che stai cercando, allora è meglio usare un normale ciclo for .

Un utile video sul ciclo for-each

Loop nel corso CodeGym

Su CodeGym, iniziamo a fare pratica usando i loop al livello 4 della ricerca Java Syntax . Molte delle lezioni in quel livello, così come molti dei compiti in vari livelli, sono dedicate ai loop per rafforzare le tue abilità nel lavorare con loro. Fondamentalmente, non c'è modo di evitarli: i loop sono uno dei costrutti più importanti nella programmazione.

Ulteriori informazioni sui cicli for-each e altri

  1. L'istruzione while . L'articolo riguarda il tipo più semplice di loop: il whileloop, che CodeGym utilizza per introdurre i loop agli studenti.
  2. Smetti di scrivere loop! Le 10 migliori pratiche per lavorare con le raccolte in Java 8 . Questo articolo aiuterà gli studenti di CodeGym che sono almeno a metà del corso a imparare molte cose interessanti sul lavoro con le raccolte.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION