JavaRush /مدونة جافا /Random-AR /لكل حلقة في جافا

لكل حلقة في جافا

نشرت في المجموعة

ما هو foreach في جافا؟

For-each هو نوع من حلقات for يتم استخدامه عندما تحتاج إلى معالجة كافة عناصر المصفوفة أو المجموعة. تُترجم عبارة "لكل" من الإنجليزية إلى "للجميع". في الواقع، عبارة foreach نفسها لا تستخدم في هذه الدورة. بناء الجملة الخاص به هو كما يلي:
for (type itVar : array)
{
    Блок операторов;
}
أين typeهو نوع المتغير التكراري (نفس نوع البيانات في المصفوفة!)، itVarهو اسمه، arrayهو المصفوفة (قد يكون هناك أيضًا بنية بيانات أخرى، نوع من المجموعة، على سبيل المثال ArrayList)، أي الكائن الذي يتم تنفيذ الحلقة عليه. كما ترون، لم يتم استخدام العداد في هذا التصميم، حيث يتكرر متغير التكرار على عناصر المصفوفة أو المجموعة، وليس قيم الفهرس. عند تنفيذ مثل هذه الحلقة، يتم تعيين متغير التكرار بشكل تسلسلي لقيمة كل عنصر من عناصر المصفوفة أو المجموعة، وبعد ذلك يتم تنفيذ كتلة البيانات (أو العبارة) المحددة.

بصرف النظر عن حلقة for-each، تمتلك Java أيضًا طريقة forEach(). يمكنك أن تقرأ عنها، على سبيل المثال، في المقالة " توقف عن كتابة الدورات!" أفضل 10 طرق للعمل مع المجموعات في Java 8

انتباه:يمكن تطبيق حلقة for-each على المصفوفات وأي فئات تقوم بتنفيذ الواجهة java.lang.Iterable. سيكون ما يعادل الكود أعلاه هو حلقة for التالية :
for (int i=0; i<array.length; i++)
{

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

مثال جافا 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();
    }
إذا استدعينا هذه الطريقة من الطريقة 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، ويُعتبر استخدام for-each ممارسة جيدة حيث يمكن القيام بذلك. ومع ذلك، لكل منها هو بناء أقل تنوعا من العادي ل. فيما يلي بعض الحالات البسيطة التي لن ينجح فيها استخدام for-each على الإطلاق أو سيعمل، ولكن بصعوبة.
  1. إذا كنت ترغب في متابعة حلقة من النهاية إلى البداية. أي أنه لا يوجد نظير مباشر لكل رمز للكود التالي:

    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

الحلقات في دورة JavaRush

في JavaRush، بدأنا في استخدام الحلقات عمليًا في المستوى 4 من مهمة Java Syntax . وهناك عدة محاضرات مخصصة لهم، بالإضافة إلى العديد من المهام بمستويات مختلفة لتعزيز مهارات العمل معهم. بشكل عام، لا يمكنك الهروب منها، فالحلقات هي واحدة من أهم البنيات في البرمجة.

المزيد عن لكل والحلقات:

  1. "لحلقة ولكل حلقة: حكاية كيف قمت بالتكرار والتكرار ولكن لم أكرر - مقالة مفصلة جيدة حول الحلقات لكل حلقة في Java". مصمم للقارئ المدرب (مستوى JavaRush 10 وما فوقه تقريبًا).
  2. بينما البيان . المقالة مخصصة لأبسط دورة whileوالتي تبدأ من خلالها في التعرف على الدورات في JavaRush.
  3. توقف عن كتابة الدورات! أفضل 10 طرق للعمل مع المجموعات في Java 8 من هذه المقالة، سيتعلم طالب JavaRush الذي أكمل بالفعل نصف الدورة التدريبية أو أكثر الكثير حول العمل مع المجموعات.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION