أن يستعمل المتدرب الجملة ــ اذا لم ــ كنقيض للجملة اذا
أن يربط المتدرب عدة جمل مشروطة معا
Switch أن يستخدم المتدرب للاختبارات المعقدة الجملة
أن ينشأ المتدرب اختبارات معقدة بواسطة المؤثر الثلاثي
العرض
نرحب بكم مرة ثانية ونواصل مسيرتنا ـ بعون الله ـ مع الجافا
مرحبا بك يا أستاذنا ما عنوان درسنا اليوم ؟
عنوان الدرس السابع من سلسلة دروس الجافا هو الجملة المشروطة ـ اذا ـ
Conditional Statement
عفوا يا صديقي أريد تمهيد أو مثال توضيحي ؟
في كثير من البرامج نطلب من الحاسب أن يكون أكثر تحديدا في تنفيذ المهام التي نطلبها منه ـ مثلا حين نكتب برنامجا للامتحانات وعرض نتائج الطلاب في مدرسة معينة نطلب من الحاسب عرض رسالة معينة بنتيجة طالب لدخول الدور الثاني في مادة الرياضيات ـ نلاحظ هنا أن الحاسب لن يعرض هذه الرسالة الا اذا نقصت درجة الطالب في مادة الرياضيات عن الحد الادني ولتحقيق هذه المهمة في برامج الجافا نستعمل فعل الشرط إذا ضمن جملة تسمى الجملة المشروطة هذه الجملة تجعل الحاسب ينفذ عمل ما في البرنامج عند تحقق شرط معين وسوف نستخدم ثلاثة أنواع من الجمل المشروطة
If ***Else *** Switch
--------------------------------------------------------------------------------
يا أستاذي هل نرجع المتغير بوليان الذي يستعمل لتخزين قيمتين فقط هما ـ صواب ,خطأ ؟
نعم يا صديق الجملة اذا تعمل بنفس المبدأ حيث تختبر الشرط من حيث الصواب أو الخطأ ولا تقوم بالعمل إلا إذا كان الشرط صحيحا
--------------------------------------------------------------------------------
طيب مثال بسيط يوضح الأمور لو سمحت ؟
if ( degree > 75)
System.out.println("very good ");
نلاحظ هنا أن اذا الشرطية تحدد ما اذا كان المتغير المذكور وهو درجة الطالب أكبر من 75 باستخدام المؤثر أكبر من ولا يتم تنفيذ جواب الشرط الا اذا كان فعل الشرط صحيحا يعني أنه لن يكتب للطالب جيد جدا الا اذا كانت درجته أكبر من 75 وهكذا
وصلت أم نزيد ؟
حياك الله أستاذي العزيز ولكن لفت انتباهي وجود فعل الشرط بين قوسين وأيضا أنك كتبت فعل الشرط على سطر وجواب الشرط على سطر فهل لهذا مغزى معين
نعم يا صديقي الشرط الذي نختبر صدقه يجب أن يضع بين قوسين ونلاحظ أن فعل الشرط ليس جملة مستقلة حيث نلاحظ عدم انتهاء السطر الأول بفاصلة منقوطة ونذكر بأن الفاصلة المنقوطة في لغة الجافا تستخدم لتحديد نهاية جملة وبداية جملة أخرى
ماذا يحدث لو ضعنا فاصلة منقوطة بعد القسم الأول ـ فعل الشرط ـ ؟
اذا وضعنا فاصلة منقوطة بعد القسم الأول فإننا بهذا نجعل القسم الأول جملة منفصلة مستقلة وهذا يسبب خطأ من النوع المنطقي الذي يصعب تحديده اذا عند استعمال الجملة المشروطة يجب أن نراعي تلك النقطة
--------------------------------------------------------------------------------
ألاحظ يا أستاذ أنك استعملت المعامل أو المؤثر أكبر من في المثال السابق فهل يقوم بنفس الدور الذي يقوم به في الرياضيات التي ندرسها ؟
نعم يقوم بنفس الدور هو ونقيضه ـ أصغر من ـ واليك هذا المثال
if (hour < 12)
System.out.println("Good morning.");
ونلاحظ هنا أن جواب الشرط يرتبط بفعل الشرط بمعنى أنه اذا لم يتحقق الشرط فانه لن يحدث شيء
--------------------------------------------------------------------------------
ولكن في بعض الحالات أريد أن أقارن بين قيمتين فماذا أفعل ؟
اذا أردت أن تختبر هل قيمة معينة تساوي أخرى أو أقل منها يمكنك استخدام المؤثر أصغر من أو يساوي >=
<= يستخدم لاختبار أكبر من أو يساوي
<= & >=
--------------------------------------------------------------------------------
هل يمكنني إختبار المساوة فقط ؟
نعم يمكنك اختبار ما اذا كان متغير ما يساوي قيمة معينة أو لا وهل متغير ما يساوي متغير آخر باستعمال المؤثر == ونلاحظ أنه يتكون من علامتي يساوي ونؤكد على أنه لا تستعمل علامتي التساوي الا في الجمل الشرطية
طيب واختبار عدم المساوة كيف يكون ؟
نستعمل المؤثر =! لاختبار عدم المساوة
وهل نستخدم المؤثرين السابقين لكل أنواع المتغيرات ؟
نستخدم المؤثرين == & =! لكل أنواع المتغيرات ما عدا المتغير استرينج الخاص بسلسلة الحروف وقد تكلمنا في الدرس السادس عن هذا الموضوع وأشرنا في حينه الى استعمال النهج ايكوال لاختبار تساوي سلسلتي حروف
--------------------------------------------------------------------------------
لاحظت أنك يا أستاذي العزيز في جميع الأمثلة السابقة تجعل جواب الشرط أمرا واحدا وهو النهج
println ( )
ولكننا في عديد من الحالات قد نرغب في انجاز أكثر من مهمة كنتيجة لفعل الشرط فماذا نفعل ؟
كلامك صحيح ياصديقي معك حق وأبشرك أنك الآن قد بدأت تنتهج النهج الصحيح في البرمجة وهذه الملحوظة تأخذنا الى الغوص في بحر البرمجة لنبحث عن الدر في صدفاته
لكي تنجز أكثر من مهمة كنيجة لتحقق الشرط عليك أن تنشأ جمل كتلية بواسطة { } الحاصرتين
بالمناسبة الجمل الكتلية هي جمل مرتبة في اطار مجموعة وقد رأينا في دروس سابقة الكتلة
main( )
وهذه الكتلة تبدأ بحاصرة الفتح { وتنتهي بحاصرة الغلق } اذاً نستعمل الجمل الكتلية مع فعل الشرط لكي نجعل الحاسب يقوم بإداء عدة مهام كنيجة لتحقق الجملة الشرطية
if (minute != 0) {
System.out.print(" " + minute + " ");
System.out.print( (minute != 1) ? "minutes" : "minute");
System.out.print(" past");
}
--------------------------------------------------------------------------------
في بعض الأحيان نريد من الحاسب انجاز عمل ما اذا كان الشرط صحيحا والقيام بعمل آخر اذا كان هذا الشرط غير صحيح فماذا نفعل أستاذي العزيز في هذه المعضلة ؟
لا معضلة ولا يحزنون لكي تفعل ذلك عليك استعمل الجملة
else مع الجملة if
if (hour < 12)
System.out.println("Good morning.\n");
else if (hour < 17)
System.out.println("Good afternoon.\n");
else
System.out.println("Good evening.\n");
--------------------------------------------------------------------------------
if ( grade = = 'A')
System.out.println(" ناجح بامتياز ");
else if ( grade = = 'B')
System.out.println(" ناجح بتقدير جيد جدا ");
else if ( grade = = 'C')
System.out.println("ناجح بتقدير جيد ");
else if ( grade = = 'D')
System.out.println("ناجح بتقدير مقبول ");
else
System.out.println(" راسب وباق للاعادة ");
--------------------------------------------------------------------------------
تمام يا أستاذ الحالات السابقة فيها شرطان فقط باستثناء المثال أعلاه الا يوجد طريقة أخرى للتعامل مع شروط مختلفة متنوعة
يوجد طريقة أخرى لاختبار مجموعة متنوعة من الشروط والاستجابة لكل منها منفردا هذه الطريقة هي استعمال الجملة
switch
switch (month) {
case (1):
System.out.print("January");
break;
case (2):
System.out.print("February");
break;
case (3):
System.out.print("March");
break;
case (4):
System.out.print("April");
break;
case (5):
System.out.print("May");
break;
case (6):
System.out.print("June");
break;
case (7):
System.out.print("July");
break;
case (
:
System.out.print("August");
break;
case (9):
System.out.print("September");
break;
case (10):
System.out.print("October");
break;
case (11):
System.out.print("November");
break;
case (12):
System.out.print("December");
}
يحدد السطر الأول من الجملة سويتش المتغير المراد اختباره وهو هنا متغير الشهر ثم نتستعمل بعد ذلك الحاصرتين لتكوين جملة كتلية
case الجملة
تختبر هذه الجملة قيمة متغير الاختبار المحدد في الجملة سويتش مقارنة بقيمة معينة
ارجو التوضيح لأننا قد رجعنا الى الطلاسم مرة ثانية ؟
لا طلاسم ولا غيره ببساطة في المثال السابق نجد أن هناك جمل للقيم من 1 الى 12 وكل جملة من هذه الجمل يليها جملة واحدة وعندما تتطابق واحدة من هذه الجمل مع المتغير المحدد في الجملة سويتش يقوم الحاسب بتنفيذ الجملة الموجودة بعد الجملة كايس المحددة الى أن يصل الى الجملة بريك
switch ------- ------ case ------- ------- break
على سبيل المثال اذا كان المتغير ( شهر ) يحتوي القيمة 3 فسوف يعرض النص ( مارس ) ولأن الجملة التالية هي بريك فلن يتم التعامل مع ما تبقى من الجملة سويتش
break اذا الآن اتضح وظيفة الجملة
معك حق الجملة بريك تطلب من الحاسب أن يخرج من الجملة سويتش
ولكن في بعض البرامج غير المثال المذكور أعلاه تكون جميع الجمل كايس غير صحيحة فماذا نفعل ؟
default نستعمل الجملة
حيث تستعمل هذه الجملة عندما تكون جميع الجمل كايس غير صحيحة
مثال للتوضيح
switch ( grade ){
case "A":
System.out.println(" ناجح بامتياز ");
break;
case "B":
System.out.println(" ناجح بتقدير جيد جدا ");
break;
case "C":
System.out.println("ناجح بتقدير جيد ");
break;
case "D":
System.out.println("ناجح بتقدير مقبول ");
break;
default:
System.out.println(" راسب وباق للاعادة ");
--------------------------------------------------------------------------------
عفوا أستاذي الكريم الا يوجد طريقة مختصرة عن الطريقة السابقة ؟
يوجد طريقة مختصرة ولكنها تحتاج الى تركيو وقدرات خاصة وتسمى هذه الطريقة المختصرة باسم ( المؤثر الثلاثي ) ويتكون من الآتي
الشرط الواجب اختباره محاطا بقوسين
علامة استفهام ؟
القيمة التي يجب استعمالها اذا كان الشرط صحيحا
نقطتان :
القيم البديلة اذا كان الشرط غير صحيح
مثال
لعرض النص السيد أو السيدة ضمن برنامج يعرض أسماء المدرسين والمدرسات في المدرسة وفقا للمتغير جيندر
System.out.print( ( gender. equals("male"))?"السيدة" :" السيد");
--------------------------------------------------------------------------------
طلب أخير من فضلك أستاذي العزيز أريد برنامجا يتضمن كل ما سبق ؟
اليك هذا البرنامج بعنوان كام الساعة
import java.util.*;
class WTime {
public static void main(String[] arguments) {
// اجلب الوقت الحالي والتاريخ
GregorianCalendar now = new GregorianCalendar();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int month = now.get(Calendar.MONTH) + 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);
// إعرض التحية
if (hour < 12)
System.out.println("Good morning.\n");
else if (hour < 17)
System.out.println("Good afternoon.\n");
else
System.out.println("Good evening.\n");
// ابدأ الرسالة بعرض الدقائق
System.out.print("It's");
if (minute != 0) {
System.out.print(" " + minute + " ");
System.out.print( (minute != 1) ? "minutes" : "minute");
System.out.print(" past");
}
// اعرض الساعة
System.out.print(" ");
System.out.print( (hour > 12) ? (hour - 12) : hour );
System.out.print(" o'clock on ");
// عرض اسم الشهر
switch (month) {
case (1):
System.out.print("January");
break;
case (2):
System.out.print("February");
break;
case (3):
System.out.print("March");
break;
case (4):
System.out.print("April");
break;
case (5):
System.out.print("May");
break;
case (6):
System.out.print("June");
break;
case (7):
System.out.print("July");
break;
case (
:
System.out.print("August");
break;
case (9):
System.out.print("September");
break;
case (10):
System.out.print("October");
break;
case (11):
System.out.print("November");
break;
case (12):
System.out.print("December");
}
// عرض التاريخ والسنة
System.out.println(" " + day + ", " + year + ".");
}
}
--------------------------------------------------------------------------------
بعد ترجمة البرنامج واخراجه عند تشغيله سوف يعرض الآتي