CodeGym /Java блог /Случаен /Цикъл за всеки в Java
John Squirrels
Ниво
San Francisco

Цикъл за всеки в Java

Публикувано в групата

Какво е цикъл за всеки?

For -each е вид for цикъл, който използвате, когато трябва да обработите всички елементи на масив or колекция. Въпреки това фразата for-each всъщност не се използва в този цикъл. Синтаксисът му е Howто следва:

for (type itVar : array) 
{ 
    // Operations
}
Където type е типът на променливата на итератора (която съответства на типа данни на елементите в масива!), itVar е неговото име, а array е масив (разрешени са и други структури от данни, например няHowъв вид колекция, като ArrayList ), т.е. обектът, върху който се изпълнява цикълът. Както можете да видите, тази конструкция не използва брояч: променливата на итератора просто итерира елементите на масива or колекцията. Когато се изпълнява такъв цикъл, на променливата на итератора последователно се присвоява стойността на всеки елемент от масива or колекцията, след което се изпълнява посоченият блок от оператори (or оператор).

В допълнение към цикъла for-each, Java има и метод forEach(). Можете да прочетете за това в статията, озаглавена "Спрете да пишете цикли!" 10 най-добри практики за работа с колекции в Java 8

Забележка:цикъл for-each може да се приложи към масиви и всяHowви класове, които имплементират интерфейса java.lang.Iterable . Следният for цикъл би бил еквивалентен на горния code:

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

Пример за цикъл за всеки

Ние създаваме масив от резултати на ученици. След това използваме цикъл за всеки, за да отпечатаме всички оценки, да изчислим средния резултат и да намерим най-добрия резултат.

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

}
Изход от програмата:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Сега нека видим How би изглеждал метод за отпечатване на всички резултати, ако използваме обикновен 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();
    }
Ако извикаме този метод от основния метод, тогава получаваме този резултат:

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

Пример за цикъл for-each с колекции

Създаваме колекция от имена и показваме всички имена на екрана.

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

Ограничения на цикъла for-each

Компактната форма на цикъла for-each се счита за по-лесна за четене от цикъл for и се счита за най-добра практика да се използва цикъл for-each , когато е възможно. Цикълът for-each обаче е по-малко универсална конструкция от обикновения цикъл for . Ето някои прости случаи, при които цикъл for-each or няма да работи изобщо, or ще работи, но само с трудности.
  1. Ако искате да преминете през цикъл от края към началото. Тоест, няма цикъл за всеки , който да е пряк аналог на следния code:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each не е подходящ, ако искате да направите промени в масив. Например, не можете да сортирате масив, без да промените местоположението на неговите елементи. Освен това в следния code ще се промени само променливата на итератора, а не елементът на масива:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Ако търсите елемент в масив и трябва да върнете (or предадете) индекса на елемента, който търсите, тогава е по-добре да използвате обикновен for цикъл.

Полезно видео за цикъла for-each

Цикли в курса CodeGym

В CodeGym започваме да практикуваме използване на цикли на ниво 4 от търсенето на Java Syntax . Няколко от уроците в това ниво, Howто и много от задачите в различни нива, са посветени на циклите, за да затвърдите уменията си за работа с тях. По принцип няма начин да им избягате — циклите са една от най-важните конструкции в програмирането.

Повече информация за циклите for-each и други

  1. Операторът while . Статията е за най-простия вид цикъл: цикълът while, който CodeGym използва, за да представи цикли на учениците.
  2. Спрете да пишете цикли! 10 най-добри практики за работа с колекции в Java 8 . Тази статия ще помогне на студентите на CodeGym, които са поне на половината от курса, да научат много интересни неща за работата с колекции.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION