JavaRush /Blog Java /Random-VI /vòng lặp for-mỗi trong Java

vòng lặp for-mỗi trong Java

Xuất bản trong nhóm

Foreach trong Java là gì?

For-each là một loại vòng lặp for được sử dụng khi bạn cần xử lý tất cả các phần tử của một mảng hoặc tập hợp. “For each” được dịch từ tiếng Anh là “dành cho mọi người”. Trên thực tế, bản thân cụm từ foreach không được sử dụng trong vòng lặp này. Cú pháp của nó như sau:
for (type itVar : array)
{
    Блок операторов;
}
Đâu typelà kiểu của biến lặp (giống như kiểu dữ liệu trong mảng!), itVarlà tên của nó, arraylà mảng (cũng có thể có một cấu trúc dữ liệu khác, một loại tập hợp nào đó chẳng hạn ArrayList), tức là đối tượng mà vòng lặp được thực thi trên đó. Như bạn có thể thấy, bộ đếm không được sử dụng trong thiết kế này; biến lặp lặp qua các phần tử của một mảng hoặc tập hợp chứ không phải các giá trị chỉ mục. Khi thực hiện một vòng lặp như vậy, biến lặp được gán tuần tự giá trị của từng phần tử của mảng hoặc tập hợp, sau đó khối câu lệnh (hoặc câu lệnh) đã chỉ định sẽ được thực thi.

Ngoài vòng lặp for-each, Java còn có phương thức forEach(). Bạn có thể đọc về nó, chẳng hạn như trong bài viết “ Hãy ngừng viết chu kỳ!” Top 10 phương pháp tốt nhất để làm việc với Collection trong Java 8

Chú ý:Vòng lặp for-each có thể được áp dụng cho mảng và bất kỳ lớp nào triển khai giao diện java.lang.Iterable. Đoạn mã tương đương ở trên sẽ là vòng lặp for sau :
for (int i=0; i<array.length; i++)
{

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

Ví dụ về bài giảng Java

Hãy tạo một mảng các điểm của học sinh. Sau đó, bằng cách sử dụng for-each, chúng tôi in ra tất cả các điểm, hiển thị điểm trung bình và tìm điểm tối đa.
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));
    }

}
Đầu ra chương trình:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Bây giờ hãy xem phương pháp in ra tất cả các điểm sẽ như thế nào, được thực hiện bằng vòng lặp for thông thường:
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();
    }
Nếu chúng ta gọi phương thức này từ phương thức main, chúng ta sẽ nhận được kết quả:
All the grades: |5|10|7|8|9|9|10|12|

Một ví dụ về việc sử dụng vòng lặp for-each với các bộ sưu tập

Hãy tạo một bộ sưu tập tên và hiển thị tất cả các tên trên màn hình.
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);
        }

Hạn chế của vòng lặp for-each

Dạng rút gọn của for-each được coi là dễ đọc hơn for và nó được coi là một cách thực hành tốt để sử dụng for-each khi có thể thực hiện được. Tuy nhiên, for-each là một cấu trúc kém linh hoạt hơn for thông thường. Dưới đây là một vài trường hợp đơn giản mà việc sử dụng for-each sẽ không có tác dụng hoặc sẽ có tác dụng nhưng gặp khó khăn.
  1. Nếu bạn muốn đi qua một vòng lặp từ đầu đến cuối. Nghĩa là, không có sự tương tự trực tiếp cho từng đoạn mã sau:

    for (int i = array.length - 1; i >= 0; i--)
    {
          System.out.println(array[i]);
    }
  2. For-each không phù hợp nếu bạn muốn thay đổi một mảng. Ví dụ: sẽ không thể sắp xếp một mảng mà không hoán đổi các phần tử của nó. Hoặc, trong đoạn mã sau, không phải phần tử mảng sẽ thay đổi mà chỉ có biến lặp:

    for (int itVar : array)
    {
        itVar = itVar++;
    }
  3. Nếu bạn đang tìm kiếm một phần tử trong một mảng và cần trả về (hoặc truyền) chỉ mục của phần tử bạn đang tìm kiếm, thì tốt hơn nên sử dụng vòng lặp for thông thường.

Video hữu ích về for-each do sinh viên JavaRush biên soạn

Vòng lặp trong khóa học JavaRush

Tại JavaRush, chúng tôi bắt đầu sử dụng vòng lặp trong thực tế ở cấp độ 4 của nhiệm vụ Cú pháp Java . Có một số bài giảng dành riêng cho họ, cũng như nhiều nhiệm vụ ở các cấp độ khác nhau để củng cố kỹ năng làm việc với họ. Nói chung, bạn không thể thoát khỏi chúng; vòng lặp là một trong những cấu trúc quan trọng nhất trong lập trình.

Tìm hiểu thêm về for-each và vòng lặp:

  1. Vòng lặp For và For-Each: câu chuyện về cách tôi lặp đi lặp lại, lặp lại nhưng không lặp lại - một bài viết chi tiết hay về các vòng lặp for và for-each trong Java. Được thiết kế cho người đọc đã được đào tạo (khoảng JavaRush cấp 10 trở lên).
  2. Trong khi tuyên bố . Bài viết này dành cho chu trình đơn giản nhất whileđể bạn bắt đầu làm quen với các chu trình trong JavaRush.
  3. Dừng viết chu kỳ! Top 10 phương pháp tốt nhất để làm việc với các bộ sưu tập trong Java 8 Từ bài viết này, một sinh viên JavaRush đã hoàn thành một nửa khóa học trở lên sẽ học được rất nhiều điều về cách làm việc với các bộ sưu tập.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION