JavaRush /Java 博客 /Random-ZH /Java 中的 for-each 循环

Java 中的 for-each 循环

已在 Random-ZH 群组中发布

Java 中的 foreach 是什么?

For-each 是一种 for 循环,在需要处理数组或集合的所有元素时使用。“For every”从英语翻译为“为每个人”。实际上,这个循环中并没有使用foreach这个短语本身。其语法如下:
for (type itVar : array)
{
    Блок операторов;
}
其中type是迭代变量的类型(与数组中的数据类型相同!),itVar是它的名称,array是数组(还可能有另一种数据结构,例如某种集合ArrayList),即执行循环的对象。正如您所看到的,此设计中未使用计数器;迭代变量迭代数组或集合的元素,而不是索引值。当执行这样的循环时,迭代变量被顺序地赋予数组或集合的每个元素的值,之后执行指定的语句块(或语句)。

除了 for-each 循环之外,Java 还有 forEach() 方法。例如,您可以在文章“停止编写循环!”中阅读相关内容。在 Java 8 中使用集合的 10 种最佳方法

注意力:for-each 循环可以应用于数组和任何实现 java.lang.Iterable 接口的类。与上面的代码等效的是以下for循环:
for (int i=0; i<array.length; i++)
{

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

Java foreach 示例

让我们创建一系列学生成绩。然后,使用 for-each 打印出所有分数,显示平均分数,并找到最大分数。
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));
    }

}
程序输出:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
现在让我们看看使用常规 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();
    }
如果我们从 method 调用这个方法main,我们将得到结果:
All the grades: |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 根本不起作用或可以起作用,但有困难。
  1. 如果你想从头到尾经历一个循环。也就是说,以下代码没有直接的 for-each 类似物:

    for (int i = array.length - 1; i >= 0; i--)
    {
          System.out.println(array[i]);
    }
  2. 如果您想更改数组,则 For-each 不适合。例如,如果不交换数组的元素,就不可能对数组进行排序。或者,在下面的代码中,数组元素不会改变,而只会改变迭代变量:

    for (int itVar : array)
    {
        itVar = itVar++;
    }
  3. 如果您正在搜索数组中的元素并且需要返回(或传递)您正在查找的元素的索引,那么最好使用常规的 for 循环。

由 JavaRush 学生准备的有关 for-each 的有用视频

JavaRush 课程中的循环

在 JavaRush,我们在Java 语法任务的第 4 级实践中开始使用循环。有几场专门针对他们的讲座,以及许多不同级别的任务,以加强与他们合作的技能。一般来说,你无法逃避它们;循环是编程中最重要的结构之一。

有关 for-each 和循环的更多信息:

  1. For 和 For-Each 循环:关于我如何迭代、迭代但没有迭代的故事- 一篇关于 Java 中的 for 和 for-each 循环的详细文章。专为经过培训的读者(大约 JavaRush 10 级及以上)而设计。
  2. 同时声明。本文主要介绍最简单的循环while,您可以通过它开始熟悉 JavaRush 中的循环。
  3. 别再写循环了!在 Java 8 中使用集合的 10 种最佳方法。从本文中,已经完成一半或更多课程的 JavaRush 学生将学到很多有关使用集合的知识。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION