JavaRush /Java Blog /Random-IT /per ogni ciclo in Java

per ogni ciclo in Java

Pubblicato nel gruppo Random-IT

Cos'è foreach in Java?

For-each è un tipo di ciclo for utilizzato quando è necessario elaborare tutti gli elementi di un array o di una raccolta. "Per ciascuno" è tradotto dall'inglese come "per tutti". In realtà, la stessa frase foreach non viene utilizzata in questo ciclo. La sua sintassi è la seguente:
for (type itVar : array)
{
    Блок операторов;
}
Dov'è typeil tipo della variabile iterativa (lo stesso del tipo di dati nell'array!), itVarè il suo nome, arrayè l'array (potrebbe esserci anche un'altra struttura di dati, qualche tipo di raccolta, ad esempio ArrayList), cioè il oggetto su cui viene eseguito il ciclo. Come puoi vedere, in questo progetto non viene utilizzato un contatore; la variabile di iterazione esegue l'iterazione sugli elementi di un array o di una raccolta e non sui valori dell'indice. Quando si esegue un ciclo di questo tipo, alla variabile di iterazione 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, ad esempio, nell'articolo " Smetti di scrivere cicli!" I 10 migliori metodi per lavorare con le raccolte in Java 8 "

Attenzione:Il ciclo for-each può essere applicato agli array e a qualsiasi classe che implementi l'interfaccia java.lang.Iterable. L'equivalente del codice sopra sarebbe il seguente ciclo for :
for (int i=0; i<array.length; i++)
{

    Блок операторов;
}

Java per ogni esempio

Creiamo una serie di voti degli studenti. Quindi, utilizzando for-each, stampiamo tutti i punteggi, visualizziamo il punteggio medio e ne troviamo il massimo.
public class ForEachTest {

//method that prints all grades
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int num : grades) {

            System.out.print(num + "|");
        }
        System.out.println();
    }

//method that displays the average score

public static double midGrade(int[] numbers) {
        int grade = 0;

        for (int num : numbers) {
            grade = num + grade;
        }
        return ((double) grade / numbers.length);

    }
//method in which the best (maximum) score is calculated
    public static int bestGrade(int[] numbers) {
        int maxGrade = numbers[0];

        for (int num : numbers) {
            if (num > maxGrade) {
                maxGrade = num;
            }
        }
        return maxGrade;
    }

public static void main(String[] args) {

//array of ratings
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};


  int highest_marks = bestGrade(grades);
        System.out.print("All the grades: ");
        printAllGrades(grades);
        System.out.println("The highest grade is " + highest_marks);
        System.out.println("The average grade is " + midGrade(grades));
    }

}
Uscita del programma:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Ora vediamo come sarebbe un metodo per stampare tutti i punteggi, utilizzando un normale ciclo for:
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int i = 0; i < grades.length; i++) {

            System.out.print(grades[i] + "|");
        }
        System.out.println();
    }
Se chiamiamo questo metodo dal metodo main, otterremo il risultato:
All the grades: |5|10|7|8|9|9|10|12|

Un esempio di utilizzo di un ciclo for-each con le 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 del ciclo for-each

La forma compatta di for-each è considerata più leggibile di for, ed è considerata buona pratica utilizzare for-each dove può essere fatto. Tuttavia, for-each è un costrutto meno versatile rispetto a normal for. Ecco alcuni semplici casi in cui l'utilizzo di for-each non funzionerà affatto o funzionerà, ma con difficoltà.
  1. Se vuoi ripercorrere un ciclo dalla fine all'inizio. Cioè, non esiste un analogo diretto per ciascun analogo 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 sarà possibile ordinare un array senza scambiarne gli elementi. Oppure, nel codice seguente, non sarà l'elemento dell'array a cambiare, ma solo la variabile di iterazione:

    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, è meglio utilizzare un ciclo for regolare.

Video utile su for-each preparato da uno studente JavaRush

Loop nel corso JavaRush

In JavaRush, iniziamo a utilizzare i loop in pratica al livello 4 della ricerca sulla sintassi Java . Ci sono diverse lezioni a loro dedicate, così come molti compiti di diversi livelli per rafforzare le capacità di lavorare con loro. In generale, non puoi sfuggirgli; i cicli sono uno dei costrutti più importanti nella programmazione.

Maggiori informazioni su for-each e sui cicli:

  1. Ciclo For e For-Each: la storia di come ho ripetuto, ripetuto, ma non ripetuto - un buon articolo dettagliato sui cicli for e for-each in Java. Progettato per un lettore esperto (circa JavaRush livello 10 e superiore).
  2. Mentre la dichiarazione . L'articolo è dedicato al ciclo più semplice whilecon il quale inizi a conoscere i cicli in JavaRush.
  3. Smettila di scrivere cicli! I 10 migliori metodi migliori per lavorare con le raccolte in Java 8 . Da questo articolo, uno studente JavaRush che ha già completato metà del corso o più imparerà molto su come lavorare con le raccolte.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION