تعلم الجافا بكل سهولة - جمل التكرار Looping Statements
الدرس الاول دورةتعلم java
السلام عليكم ورحمة الله وبركاتة مرحبا بكم احبتي : سوف نقدم لكم درس تعلم الجافا , تعلم java , تعلم برمجة جافا , تعلم لغة جافا , جمل التكرار في جافا , لبرمجة بإستخدام لغة الجافا , تعلم جافا من الصفر , تعلم البرمجة بلغة جاف , دورة تعلم جافا , تعلم البرمجة , وسنوضح لكم في هذا الكورس من دروس الجافا الحلقات التكرارية في ألجافا.
ماهي جملة التكرار while
جملة اﻟﺘﻜﺮار Looping statements ﻗﺪرة اﻟﻜﻤﺒﻴﻮتر ﻋﻠﻰ تكرار أي جزء ﻣﻦ اﻟﻜﻮد ـ ﺧﺎﺻّﺔً ﻣﻊ سرﻋﺘﻪ اﻟﻔﺎئقة ـ هي ﻣﺎ تجعلة ﻣﺮﻳﺤﺎ جدا ﻟﻠﺒﺸﺮ، ﻟﻴﺤﻤﻞ ﻋﻨﻬﻢ ﻋﻨﺎء الرتابة.
ماهو الفرق بين for و while و do while؟
الفرق بين while و do while في الجافا في جملة do while و while ، يجب أن تقوم بتعريف المتغيّر وإعطائه قيمة ابتدائية، قبل الشروع في كتابة الجملة.
كما أنه في جمل while و do while، يتوجب عمل جملة الزيادة أو النقصان داخل الحاصرتين.
لكن فقط في جملتي for و while عند تشغيل البرنامج يتم أولًا فحص الشرط قبل الدخول إلى عملية تنفيذ الجمل داخل اللوب، بعكس do while التي تنفذ مرة واحدة على الأقل، بعد ذلك يتم فحص الشرط.
أيضا يجب وضع فاصلة منقوطة ; بعد الشرط لجملة do while.
ماهو الفرق الجوهري بين for وبقية جمل التكرار
الفرق وهي أن بداية انطلاقة for معروفة مسبقًا من تهيئة المتغير، أما في while و do while فقد تكون غير معروفة بعد.
ملاحظة: يمكن أيضًا وضع معامل الزيادة أو النقصان والتهيئة في داخل الحاصرتين بدلًا من وضعها أمام for على سبيل المثال:
برنامج للطباعة من 5 إلى 1 باستخدام الـ for:
#include <iostream>using namespace std;int main(){int x = 5;for ( ; x>=1 ;){cout<<x<<” , “;x–;}return 0;}
كما نلاحظ أننا أبقينا على الفواصل المنقوطة أمام for.
جملة التكرار do - while
شرح حلقات التكرار والتي تستخدم لنفس الهدف أي تكرار تنفيذ التعليمات البرمجية المحددة ولكن قبل هذا يجب علينا الإشارة إلى مبدأ عمل هذه الحلقة والذي يختلف بصورة جذرية عن حلقة التكرار while بحيث تعمل حلقة do - while على تنفيذ التعليمات البرمجية بغض النظر عن حالة الشرط وبعد الانتهاء من تنفيذ التعليمات تعمل حلقة do - while على التحقق من صحة الشرط فإذا وجدته صحيحا True, عندها يتم تكرار تنفيذ نفس التعليمات وفي كل مرة تكرر فيها التعليمات يتم التحقق من صحة الشرط فطالما انه صحيح تستمر عملية التكرار حتى تصبح قيمة الشرط غير صحيحة False عندها نخرج من حلقة التكرار.
الصيغة العامة لحلقة التكرار do - while
do{statment(s);}while(Condition_Expression);
تبدأ صيغة التكرار do - while بالكلمة المحجوزة do ثم قوس البداية الذي يعني بداية كلمة التكرار بما تحتويه من تعليمات برمجية بعد قوس البداية يمكننا إدراج وصياغة التعليمات البرمجية statement المطلوب تكرارها ويجب إن تنهي كل تعلمين بالفاصلة المنقوطة وبعد آخر تعليمة برمجية علينا وضع أقواس نهاية كتلة التكرار.
نتبع بعدها قوس النهاية بتعليمة العودة والتكرار والتي تتكون من الكلمة المحجوزة while متبوعة بالشرط المنطقي Condition_Expression ويجب إن ننهي حلقة التكرار بالفاصلة المنقوطة دلالة على الانتهاء حلقة التكرار ولمعرفة آلية عمل الحلقة, لندرس المثال التالي:
Class do_while{public static void main(String[] args){int A=1;//------------------------do{System.Out.Println("Arabic SEO");} while( A < 10 );//end do_while//-----------------}//end main}//end class
لاحظ في المثال أعلاه إننا صرحنا عن التغير A بقيمة مبدئية 1 داخل كتلة التكرار صغنا تعليمة طباعة النص Arabic SEO بعد ذلك حددنا شرط إعادة التنفيذ والتكرار بان تكون قيمة المتغير A اقل من عشرة تنفيذ البرنامج والوصول إلى حلقة التكرار, سيعمل البرنامج على تنفيذ تعليمة الطباعة دون ان ينظر إلى حالة الشرط, ثم سينتقل إلى تعليمة while ليتحقق من صحة الشرط لتجده صحيحا مما يعني العودة إلى بداية حلقة التكرار وإعادة تنفيذ تعليمة الطباعة وهكذا ستستمر عملية التكرار إلى ما لا نهاية طالما إن الشرط صحيح.
نستنتج من هذا المثال إن حلقة التكرار do - while ستعمل على تنفيذ التعليمات البرمجية مرة واحدة كحد أدنى وبغض النظر عن حالة الشرط ثم يأتي دور تعليمة التحقق من الشرط while والتي من شانها إعادة تنفيذ التعليمات طالما الشرط صحيح وفي حال عدم تحقق الشرط لن نعود إلى بداية حلقة التكرار بل سيتابع البرنامج تدفقه إلى التعليمة التي تلي حلقة do - while عندها سنواجه نفس المشكلة التي واجهتنا مع حلقة التكرار while وهي عدم الربط بين التعليمات البرمجية والشرط المنطقي مما سيؤدي إلى دخول البرنامج بحلقة تكرار لا منتهية, لذلك يجب علينا صياغة تعليمة برمجية داخل كتلة التكرار لتعمل على تغير قيمة المتغير محور شرط التكرار المنطقي, كما في الصيغة التالية:
Class do_while{public static void main( String[] args){int A=1;//----------------do{++A;//زيادة المتغير محور الشرطSystem.Out.Println("Arabic SEO");}while(A<10);//end do_while//-----------------------}//end main}//end class
ستعمل تعليمة على زيادة المتغير A بواحد على تغيير قيمة المتغير في كل مرة تنفذ فيها حلقة التكرار وبذلك يستمر الشرط صحيحا حتى تصل قيمة المتغير A إلى 10 عندها لن يتحقق الشرط وعندها نخرج من حلقة التكرار إلى ما يليها من تعليمات برمجية.
مثال: برنامج لطباعة الأعداد الزوجية فقط من 0 إلى عشرين.
الحل:
Class do_while{public static void main( String[] args){intA=0;//----------------------------do{System.Out.Println(A);A+=2;//العدد الزوجي التالي} while ( A< = 20 );//end do_while//---------------------------}//end main}//end class
ولاحظ إننا استخدمنا تعليمة A+=2 التي تعمل على زيادة 2 إلى قيمة المتغير A بعد تعليمة الطباعة ولو إننا استخدمناها قبل تعليمة الطباعة عندها لن نحصل على القيمة صفر كأول عدد زوجي.
مثال: برنامج لإيجاد مضروب العدد 8.
الحل:
Class do_while{public static void main(String[] args){int A=1;//------------------------do{System.Out.Println("Arabic SEO");} while( A < 10 );//end do_while//-----------------}//end main}//end class
صرحنا عن المتغير Factorial من الهيئة Long بقيمة مبدئية واحد لتستخدمه من اجل تخزين قيمة المضروب داخل حلقة التكرار do - while كانت أول تعليمة هي إجراء عملية الضرب بين المتغير Factorial والمتغير N الذي يحمل القيمة 8 ثم تعليمة إنقاص المتغير N بواحد وذلك حتى نحصل على القيمة المتسلسلة التي تسبق العدد 8 على خط الأعداد وجددنا شرط التكرار عند وصول قيمة المتغير N إلى القيمة صفر, ليتوقف عندها تكرار الحلقة.
في النهاية يمكننا تلخيص أوجه الاختلاف والتشابه بين حلقة التكرار do - while وحلقة التكرار while على النحو الآتي:
- حلقة do - while تتحقق من الشرط بعد تنفيذ العمليات البرمجية بينما حلقة التكرار while تتحقق من الشرط من البداية وقبل تنفيذ أي تعليمة.
- الحد الأدنى لتكرار تنفيذ تعليمات حلقة do - while هو مرة واحدة بغض النظر عن حالة الشرط بينما يكون الحد الأدنى لتكرار تنفيذ حلقة while هو الصفر.
الدرس الثاني من دروس تعلم لغه ألجافا جمل التكرار Looping Statements
جملة التكرار for Statement
على الرغم من استخدام كلا من لغة الجافا و الـ C++ نفس التركيب العام لحلقة التكرار for , إلا إن هناك اختلافا جوهريا بين اللغتين قد يؤدي إلى وقوع البعض ممن اعتادوا لغة C++ في أخطاء لغوية قواعدية تمنع تنفيذ حلقة التكرار وهو ما سنسلط عليه الضوء عبر حلقتنا هذه بعد التعرف على الصيغة الهامة لجملة التكرار for في لغة الجافا.
for (Initialization;Termination;Increment or Decrement)Java_Statement;
كما تلاحظ, تبدأ صيغة حلقة التكرار بـ for وهي كلمة مجوزة تدل على حلقة تكرار, يتبعها القوس الذي يضم عناصر اعدادات الحلقة الأساسية, وهي على النحو الآتي:
- initialization وهي للتصريح عن المتغير الذي سيشكل محور عداد حلقة التكرار Counter ومن الممكن إن يكون متغير عددي أو متغير حرفي, ويجب إن تتضمن عملية التصريح, إسناده المتغير بقيمة مبدئية Start Value تدل على بداية عداد الحلقة.
- تشكل تعليمة التصريح Initialization وجه الاختلاف الوحيد بين حلقة التكرار for الخاصة بالجافا وتلك الخاصة بلغة C++ بحيث تشترط علينا الجافا إن يكون المكان الوحيد للتصريح عن عداد الحلقة داخل قوس حلقة التكرار ولا يمكن بأي حال من الأحوال التصريح عن العداد خارج الحلقة وحتى لو كان المتغير محور العداد مصرح عنه على انه متغير عام فلا يمكن استخدامه كعداد خاص بحلقة التكرار for أما لغة C++ فتسمح لنا استخدام المتغيرات العامة بكل حرية كما أنها تسمح لنا بالتصريح عن المتغير محور عدادا الحلقة قبل حلقة التكرار والحقيقة إن الأفضلية في هذا الاختلاف تصب في مصلحة لغة الجافا, فعندما نلتزم بالتصريح عن عداد الحلقة ونعتبره متغير محلي خاص بحلقة التكرار.
- نضمن عدم تأثره بأي تعليمة برمجية خارج جسم الحلقة
- Termination القيمة النهائية وهي عبارة تعليمة برمجية, تتضمن شرط مقارنة متغير عداد الحلقة بالقيمة النهائية للعداد Condition , ويمكننا استخدام كافة عملية المقارنة المتعارف عليه مثل المساواة أو إشارة اكبر من أو اصغر من أو يساوي.. وهكذا.
- Increment or Decrement يختص النصر الثالث من قوس اعدادات حلقة for بتحديد معدل عملية الزيادة أو النقصان التي ستتم على متغير عداد الحلقة من اجل تحديد القيمة التالية للعداد Next Value وهنا يمكننا استخدام عمليات إسناد المتغير بنتيجة عملية حسابية أو من خلال عملية الزيادة أو النقصان بواحد.
- بعد تحديد عناصر اعدادات حلقة for يمكننا المباشرة بصياغة التعليمة البرمجية التي نرغب بتنفيذها ثم تكرار تنفيذها, هذا طبعا إذا كانت التعليمة البرمجية منفردة.
أما في حال كانت التعليمية البرمجية مركبة من عدت تعليمات, عندها يجب علينا استخدام البنية الخاصة بالتعليمة المركبة والتي تتمثل بقوس البداية الأكبر } ثم التعليمات وفي النهاية قوس النهاية الأكبر { كما هو مبين في الصيغة التالية:
for (Initialization;Termination;Increment or Decrement){Java_Statement_1;Java_Statement_2;}//end of for..............Java_Statement_N;
الية تنفيذ حلقة for
Class For_Stat{public static void main(String[] args){//---------------for(int i=0 ; i <= 10 ;i++ )System.Out.Println(i);}//end main}// end class
تتلخص فكرة المثال أعلاه بطباعة الأعداد من صفر إلى عشرة وبتحليل قوس اعدادات حلقة التكرار لاحظ إننا صرحنا عن المتغير I من الهيئة Int بالقيمة البدائية صفر ليعمل كعداد للحلقة ثم حددنا القيمة النهائية وشرط توقف التكرار عندما تتجاوز قيمة I القيمة, عشرة بمعنى آخر ستسمر تنفيذ الحلقة طالما إن قيمة I اقل من أو تساوي عشرة أما معدل زيادة عداد الحلقة فكان الزيادة بواحد في كل مرة تنفيذ فيها الحلقة.
تبدأ آلية تنفيذ البرنامج السابق بتسجيل قيمة المتغير ضمن مسجل خاص ثم التحقق من شرط التوقف فإذا وجد صحيحا نخرج من حلقة التكرار دون تنفيذ أي تعليمة برمجة تابعة للحلقة أما إذا لم يتحقق شرط التوقف عندها نقوم بتنفيذ تعليمة الطباعة وبعد ذلك نعود إلى اعدادات حلقة for وتحديدا إلى العنصر الثالث " الزيادة أو النقصان على العداد" ليتم تطبيق عملية الزيادة وتسجيل القيمة الجديدة لعداد الحلقة لنعود بعدها إلى العنصر الثاني " شرط التوقف والتحقق من القيمة النهائية لعداد الحلقة.. وهكذا يستمر تكرار تنفيذ تعليمات الحلقة حتى يتحقق شرط التوقف لنخرج عندها من حلقة التكرار.
استخدام عداد حرفي char
ليس شرط إن يكون المتغير محور عداد الحلقة من صيغة الأعداد الصحيحة, إذ يمكننا استخدام المتغيرات الحرفية كعداد لحلقة التكرار for كما هو مبين في المثال التالي:
Class For_Stat{public static void main(String []args){//----------for(char i='a';i<='z';++i){System.Out.Print(i);System.Out.Print("");}//--end of for statement}//end main}//end class
وفقا للتعليمة البرمجية أعلاه, تتم طباعة سلسلة الحروف a--> z يفصل بينها فراغ واحد لاحظ عند إسناد القيمة الابتدائية للمتغير الحرف يجب إن توضع القيمة بين علامات الاقتباس الأحادية Quotation
قد تبدو عملية الزيادة بواحد على المتغير الحرفي غير مألوفة, إذ الغالبية منا تعلم بان شان عملية الزيادة بواحد إن تزيد قيمة المتغير بقيمة واحدة, فهل من المنطق إن نضيف واحد إلى حرف؟
الحقيقة إن تطبيق عملية الزيادة بواحد على المتغير الحرفي يتخللها عملية تحويل ذاتية يتكفل بها المترجم بحيث يتم تحويل المتغير الحرفي إلى نظام الترميز ASCII Code الذي يمثل كل حرف بقيمة عددية معينة بحسب لغة المتغير الحرفي وحالة الحرف إذا كان كبير أو صغير, على سبيل المثال يقابل الحرف a في نظام الـ ASCII الرقم 97 وعندما تطبق عليه عملية الزيادة بواحد نحصل على قيمة الـ ASCII الجديدة 98 والتي تعود للحرف b وهكذا حتى نهاية سلسلة الحروف.
تقودنا فكرة المثال السابق لصياغة برنامج يتكفل بإخراج القيمة المقابلة لكل حرف في نظام الـ ASCII , وهنا لن نحتاج لإجراء أكثر من إجراء تعديل بسيط على المثال أعلاه ليصبح على النحو التالي:
Class For_Stat{public static void main(string[]args){//----------for(char i='a';i<='z';++i){System.Out.Printl(i+"the Ascii is:"+(int)i);}//--end of for statemen}//end main}//end class
كما في الصيغة البرمجية المعدلة, بم نغير شيئا على تعليمة الطباعة سوى تحويل الحرف إلى ما يقابله بنظام الـ ASCII بطريقة يدوية وهي التحويل من حرف إلى رقم بهيئة int.
وفي الختام : نشكركم على مروركم الكريم زوار و متابعين موقع الاندرويد تيك التقنية ونتمنى ان نكون قد وفقنا في هذا المقال,كما نرحب بعودتكم مرة اخرى لموقعنا ومتابعة كل جديد او يمكنكم متابعتنا والانضمام الى القناة الخاصة بلموقع على التلجرام من هنا.