افتح القائمة الرئيسية
Question book-new.svg
المحتوى هنا ينقصه الاستشهاد بمصادر. يرجى إيراد مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018)
N write.svg
هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر عدا الذي أنشأها؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. (مايو 2015)
Commons-emblem-copyedit.svg
هذه المقالة ليس بها أي وصلات لمقالاتٍ أخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (يوليو 2015)

الحلقات في لغة الجافا هي عباره عن طريقة تستخدم لتكرار ما بداخلها لعدد المرات المحددة من قبل المبرمج

1-حلقة forعدل

حلقة for تعتبر من اعم الهياكل البنائية للحلقات في جافا والتي تدعم التكرار الذي يتحكم به عداد أو قيمه متغيره باستمرار بعد كل دوره من التكرار. الصورة التاليه توضح ان الشفرة البرمجيه ستقوم بطباعة الأرقام بشكل تصاعدي من 1 وحتى 10 باستخدام هذه الشفرة

 
مثال على حلقة FOR

(++for(int i = 0; i<=10;i

(System.out.println(i

تعتبر الخليه الأولى خليه خاصه بالإنشاء حيث يتم إنشاء المتغيرات فيها واعطاء قيم مبدأيه لتلك المتغيرات اما الخليه الثانية فهي تبين الشرط الذي يجب اختباره قبل ان تنفذ الشفرة البرمجيه داخل الحلقة والخليه الثالثة هي التي يتم فيها تحديث القيم للمتغير.

في الحقيقة لغة جافا مشابهه للغة ++C من ناحية انها تقبل ان يتم وضع عمليات حسابيه في الخلايا الثلاث ولكنه قانون غير مكتوب لكونه يفتقد للاحساس السليم والذي ينص على أن الخلايا الثلاث يجب أن تحمل الإنشاء, الشرط والتحديث عوضا عن أي عمليات حسابيه أخرى. بشكل عام جافا لاتضع قيود كثيره على المبرمج فباستطاعته ان يكون التحديث تنازليا عوضا عن كونه تصاعدي في الصورة السابقة.

تنبيه: احذر عندما تستخدم شرط المساواه مع العداد العشريه في الحلقات كالمثال التالي : (++for (int I = 0; i!= 10; i شفره برمجيه كهذه قد تكون مستحيلة التوقف بسبب ان الاعداد التي تكون بعد الفاصلة قد لا تصل نهائيا للرقم المطلوب, فمثلا قد تصل الحلقة عن الرقم 9.999998 ثم وبعد تحديث القيمة تصبح 10.099998 وذلك لانه لا توجد قيمه برمجيه ثنائية Binary معينه لترمز للعدد 0.1 !.

عندما قمت بتعريف متغير في الفتحة الأولى نطاق هذا المتغير يمتد حتى نهاية الجسم حلقة for:

(++for (int i = 1; i <= 10; i { . . . } // لم يعد يعرف هنا i


على وجه الخصوص، إذا قمت بتعريف متغير داخل بيان for لا يمكنك استخدام قيمة هذا المتغير خارج الحلقة لذلك، إذا كنت ترغب في استخدام القيمة النهائية للحلقة خارجها ، تأكد أن يعلن أنه خارج رأس الحلقة.

int i

(++for (i = 1; i <= 10; i { . . . } // لا يزال يعرف هنا i

من ناحية أخرى، يمكنك تحديد المتغيرات بنفس الاسم في منفصلة عن الحلقات:

(++for (i = 1; i <= 10; i

{ . . . } . . . (++for (int i = 11; i <= 20; i //لا بأس بتعريف متغير آخر اسمهi { . . . }

حلقة for هو مجرد اختصار مريح للحلقة while مثلا: (--for (int i = 10; i > 0; i

(System.out.println("Counting down . . . " + i

ويمكن إعادة كتابتها كما هنا،

int i = 10

(while (i > 0 {

(System.out.println("Counting down . . . " + i
--i

}

على سبيل المثال برنامج يحسب فرص الفوز في اليانصيب ، يجب عليك اختيار 6أرقام من الأرقام من 1 إلى 50 حتى تفوز، ثم هناك (50 × 49 × 48 × 47 × 46 × 45)/(1 × 2 × 3 × 4 × 5 × 6) النتائج المحتملة، لذلك فرصتك هي 1 في 15890700. حظا سعيدا! بشكل عام، إذا اخترت k أرقام من اصل n، فهناك

نتائج ممكنه،وفيما يلي حلقه for التاليه تحسب هذه القيمة

int lotteryOdds = 1

(++for (int i = 1; i <= k; i

lotteryOdds = lotteryOdds * (n - i + 1) / i

2-حلقة whileعدل

حلقة while (في حين) ينفذ البيان "واللتي قد تكون مجموعة من البيانات" في حين (while) ان الجملة الشرطيه المذكورة بين قوسي الحلقة صحيحه الشكل العام لها هو:

                                           (الجملة الشرطيه)while
                                                  البيان

حلقة while لن تنفذ ابدا إذا كان الشرط غير صحيح في البدايه.كما هو موضح في الصورة المرفقة.

 
صوره توضيحيه لمراحل حلقة while

البرنامج الموجود في الأسفل يحدد كم من الوقت سيستغرق حفظ مبلغ معين من المال لجهود التقاعد اللتي استحقها المستخدم بجداره على افتراض انه يقوم بإيداع نفس المبلغ سنويا وان المال يكسب سعر الفائدة المحددة.

  • . import java.util
/**
* This program demonstrates a while loop.
* @version 1.20 2004-02-10
* @author Cay Horstmann
*/

public class Retirement

}

(public static void main(String[] args)

}

// read inputs

;(Scanner in = new Scanner(System.in)

;("?System.out.print("How much money do you need to retire

;()double goal = in.nextDouble

;("?System.out.print("How much money will you contribute every year

;()double payment = in.nextDouble

;(":%System.out.print("Interest rate in

;()double interestRate = in.nextDouble

;double balance = 0

;int years = 0

// update account balance while goal isn't reached

(while (balance < goal

}

// add this year's payment and interest

;balance += payment

;double interest = balance * interestRate / 100

;balance += interest

;++years

{

;(".System.out.println("You can retire in " + years + " years

{

{

في المثال، نحن نقوم بزايدة العداد و تحديث المبلغ المتراكم حاليا وذلك يتم في جسم الحلقه ونستمر على هذا المنوال حتى يتجاوز إجمالي المبلغ المستهدف.

}(while (balance < goal

balance += payment
double interest = balance * interestRate / 100
balance += interest
++years
(". System.out.println(years + " years

{

(لا تعتمد على هذا البرنامج لتخطيط مستحقات التقاعد الخاص بك، لقد تركنا القليل من الجماليات مثل التضخم و متوسط العمر الخاص بك.) حلقة while تختبر الجمله الشرطيه عند البدايه "قبل جسم الحلقه". لذلك، قد لا يتم تنفيذ العمليات البرمجية لهذه الحلقة بتاتا. إذا كنت ترير تأكيد ان الكتلة البرمجيه ستعمل على الأقل مره واحده، سوف تحتاج إلى نقل الجملة الشرطيه للأسفل.

3-حلقه do..whileعدل

هذا النوع من الحلقات ينقذ الجملة ( والذي عادة ما بكون مجموعة من الجُمَل ) و بعد ذلك فقط يتم اختبار الشرط . بعد ذلك يكرر الجملة و يختبر الشرط ثانيةً ، و هلم جراً . الشفرة البرمجية التالية 4-3 تحسب الرصيد الجديد في حساب التقاعد الخاص بك ثم يسال إذا كنت على استعداد للتقاعد :

do

}

balance += payment
double interest = balance * interestRate / 100
balance += interest
++year

// طباعة الرصيد الحالي . . .

// يسأل إذا كان مستعدا لأخذ و استرجاع المدخل . . .

{

(("while (input.equals("N

سوف يتم تكرار الحلقة طالما اجابة المستخدم"N" ، (انظر الشكل).

 
مثال على حلقة do-while

هذا البرنامج هو مثال جيد للحلقة المُراد تكرارها مرة واحدة على الأقل ، لأن المستخدم يريد أن يعلم الرصيد قبل ان يقرر إذا كان كافي للتقاعد .

import java.util.*;

Public class Retirement2 {

public static void main(String[] args) { Scanner in = new Scanner (System.in);

System.out.print(“Hou much money will you contribute every year?”);

double payment = in.nextDouble();

System.out.print(“Interest rate in % : ”);

double interestRate = in.nextDouble();

double balance = 0;

int year = 0;

String input;

// سيتم تحديث الرصيد طالما المستخدم غير مستعد لاسترجاعه

do {

//add this year's payment and interest

balance += payment;

double interest = balance * interestRate / 100;

balance += interest;

year++;

//طباعة الرصيد الحالي

System.out.printf("After year %d, your balance is %,.2f%n", year, balance);

// يسال المستخدم هل إذا كان مستعدا لأخد و استرجاع المدخل

System.out.print(“Ready to retire? (Y/N)”);

input = in.next();

} while(input.equals('N')));

}

}

مصادرعدل

  • Horstmann, Cay S., 1959- Core Java Volume 1 Fundamentals 8th edition - chapter 3