الشروط: برامج تختار
كيف يقرر البرنامج ما يفعله بناءً على القيم التي بين يديه؟
في نهاية هذه المحاضرة ستكون قادرًا على
- تكتب شروطًا باستخدام عوامل المقارنة، وتميّز بين
=و== - تستخدم
ifوif-elseلتنفيذ جزء من البرنامج دون آخر - تشرح دور الأقواس
{ }، وتكتشف فخ الفاصلة المنقوطة بعد الشرط - تجمع الشروط بالعوامل
&&و||و!، وتستفيد من التقييم المختصر - تفحص مدى من القيم بالطريقة الصحيحة، وتقارن النصوص باستخدام
equals
محتويات المحاضرة
- البرامج تختار كما تختار أنت كل يوم
- الشرط سؤال جوابه true أو false
- الأمر if ينفّذ كتلة فقط إذا كان الشرط true
- العلامة = تخزّن قيمة، والعلامة == تطرح سؤالًا
- الأمر if-else ينفّذ أحد فرعين دائمًا، ولا ينفّذهما معًا
- الأقواس هي التي تحدد ما يتبع الشرط، وليست الإزاحة
- الفاصلة المنقوطة بعد الشرط تجعل الكتلة تُنفَّذ دائمًا
- العوامل && و|| و! تصنع من الشروط شرطًا واحدًا
- تُنفَّذ ! أولًا، ثم &&، ثم ||، والأقواس تغيّر هذا الترتيب
- تتوقف Java عن الحساب فور معرفة النتيجة، وهذا يحمينا من القسمة على صفر
- فحص المدى يحتاج إلى مقارنتين يصل بينهما &&
- تُقارَن النصوص بالدالة equals، وليس بالعامل ==
- الأكبر من عددين: احفظ إجابتك في متغير ثم صحّحها إذا لزم
- التمرين النهائي: برنامج يجمع كل ما تعلمناه
- أسئلة المراجعة
البرامج تختار كما تختار أنت كل يوم
كانت برامجنا حتى الآن تنفّذ كل سطر من الأعلى إلى الأسفل، مهما كانت القيم. لكن البرامج الحقيقية تنظر إلى القيم أولًا، ثم تقرر.
| الموقف | السؤال | إذا كانت الإجابة نعم | إذا كانت الإجابة لا |
|---|---|---|---|
| الصرّاف الآلي | هل الرصيد كافٍ؟ | يسلّمك المال | يعرض رسالة رفض |
| فتح الهاتف | هل الرمز صحيح؟ | يفتح الشاشة | يطلب الرمز مرة أخرى |
| نتيجة الامتحان | هل العلامة 60 أو أكثر؟ | ناجح | راسب |
الشرط سؤال جوابه true أو false
تعطي عوامل المقارنة قيمة من نوع boolean، وهو نوع له قيمتان فقط: true وfalse. ويمكنك طباعة هذه القيمة أو تخزينها في متغير مثل أي قيمة أخرى.
| العامل | المعنى | مثال | النتيجة |
|---|---|---|---|
== | يساوي | 5 == 5 | true |
!= | لا يساوي | 5 != 5 | false |
> | أكبر من | 7 > 3 | true |
< | أصغر من | 7 < 3 | false |
>= | أكبر من أو يساوي | 3 >= 3 | true |
<= | أصغر من أو يساوي | 4 <= 3 | false |
اسأل Java ستة أسئلة
توقّع كل سطر قبل التشغيل. ثم غيّر age إلى 18 وتوقّع مرة أخرى.
public class Comparisons {
public static void main(String[] args) {
int age = 19;
System.out.println(age > 18);
System.out.println(age < 18);
System.out.println(age >= 19);
System.out.println(age <= 18);
System.out.println(age == 19);
System.out.println(age != 19);
boolean adult = age >= 18;
System.out.println(adult);
}
}true false true false true false true
الحساب يأتي قبل المقارنة. ماذا يطبع؟
public class MathFirst {
public static void main(String[] args) {
int a = 7;
int b = 10;
System.out.println(a + 3 == b);
System.out.println(a % 2 == 0);
System.out.println(a * 2 > b);
}
}أظهر الناتج
true false true
لماذا؟ تحسب Java طرفي المقارنة أولًا: 10 تساوي 10، والباقي 1 لا يساوي 0، و14 أكبر من 10.
كيف تكتب في Java «x لا يساوي صفرًا»؟
! تعني «ليس»، وتأتي قبل = مباشرة وبلا مسافة بينهما. ولا تعرف Java العامل <> الموجود في لغات أخرى.الأمر if ينفّذ كتلة فقط إذا كان الشرط true
if (condition) {
// runs only when the condition is true
}
// the program always continues here{ }.شاهد البرنامج يتخطى سطرًا
اضغط «تتبّع سطرًا سطرًا» وراقب أي سطر يتوقف عنده البرنامج. ثم غيّر temperature إلى 36 وتتبّعه من جديد: أي سطر اختفى من الرحلة؟
public class Temperature {
public static void main(String[] args) {
int temperature = 38;
if (temperature > 37) {
System.out.println("Fever: see a doctor");
}
System.out.println("Check finished");
}
}Fever: see a doctor Check finished
الرصيد 40 والسعر 50. ماذا يطبع البرنامج؟
public class Shop {
public static void main(String[] args) {
int balance = 40;
int price = 50;
if (balance >= price) {
System.out.println("Bought");
balance -= price;
}
System.out.println("Balance: " + balance);
}
}أظهر الناتج
Balance: 40
لماذا؟ الشرط false، فتخطى البرنامج الكتلة كلها: لم تحدث الطباعة ولا الطرح. أما السطر الأخير فخارج الكتلة، فينفَّذ دائمًا.
العلامة = تخزّن قيمة، والعلامة == تطرح سؤالًا
يضع القيمة 5 في الصندوق x.
x = 5;يسأل: هل قيمة x تساوي 5؟ والجواب true أو false.
x == 5علامة واحدة ناقصة
أصلح الشرط حتى يطبع البرنامج x is five.
public class CheckFive {
public static void main(String[] args) {
int x = 5;
if (x = 5) {
System.out.println("x is five");
}
}
}incompatible types: int cannot be converted to booleanأظهر التصحيح
public class CheckFive {
public static void main(String[] args) {
int x = 5;
if (x == 5) {
System.out.println("x is five");
}
}
}x is five
لماذا؟ ناتج x = 5 هو القيمة 5، وهي int، بينما يطلب if قيمة boolean. تتحدث الرسالة عن الأنواع ولا تذكر العلامة الناقصة، فتذكّر هذا النمط حين تراها داخل شرط.
هنا يصمت المترجم. ماذا يطبع البرنامج؟
public class Finished {
public static void main(String[] args) {
boolean finished = false;
if (finished = true) {
System.out.println("Done");
}
System.out.println(finished);
}
}أظهر الناتج
Done true
لماذا؟ الشرط إسناد: يضع true في finished، وناتجه true من النوع boolean، فيقبله المترجم. ولهذا اكتب مع المتغيرات المنطقية if (finished) فقط، فلا تقع في هذا الخطأ.
الأمر if-else ينفّذ أحد فرعين دائمًا، ولا ينفّذهما معًا
ناجح أم راسب؟
شغّل البرنامج ثلاث مرات وأدخل 59 ثم 60 ثم 61، فالقيم عند الحد هي التي تكشف الأخطاء. ثم اضغط «تتبّع سطرًا سطرًا» لترى الفرع الذي ينفَّذ. لاحظ أننا استخدمنا ثابتًا لعلامة النجاح.
import java.util.Scanner;
public class PassFail {
public static void main(String[] args) {
final int PASS_MARK = 60;
Scanner input = new Scanner(System.in);
System.out.print("Mark: ");
int mark = input.nextInt();
if (mark >= PASS_MARK) {
System.out.println("Pass");
} else {
System.out.println("Fail");
}
System.out.println("Done");
}
}يغيّر الفرع الأول قيمة x. هل يعود البرنامج لفحص الشرط؟
public class OneBranch {
public static void main(String[] args) {
int x = 10;
if (x > 5) {
x = x - 8;
} else {
x = x + 8;
}
System.out.println(x);
}
}أظهر الناتج
2
لماذا؟ يُفحص الشرط مرة واحدة فقط قبل الدخول إلى الفرع. صحيح أن x أصبحت 2، لكن البرنامج لا يعود إلى الشرط، ويتجاوز else كله.
زوجي أم فردي؟
اقرأ عددًا صحيحًا واحدًا، ثم اطبع Even إذا كان زوجيًا وOdd إذا كان فرديًا. لا تطبع أي رسالة تطلب الإدخال.
import java.util.Scanner;
public class EvenOdd {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Read the number, then decide
}
}4
Even
تلميح 1
العدد الزوجي باقي قسمته على 2 يساوي صفرًا: n % 2 == 0.
تلميح 2
لا تكتب n % 2 == 1: فناتج -3 % 2 في Java هو -1، فيخطئ شرطك مع الأعداد السالبة.
الحل
import java.util.Scanner;
public class EvenOdd {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if (n % 2 == 0) {
System.out.println("Even");
} else {
System.out.println("Odd");
}
}
}الأقواس هي التي تحدد ما يتبع الشرط، وليست الإزاحة
السطران يبدوان تابعين للشرط، فهل هما كذلك؟
public class NoBraces {
public static void main(String[] args) {
int mark = 40;
if (mark >= 60)
System.out.println("Passed");
System.out.println("Well done");
System.out.println("End");
}
}أظهر الناتج
Well done End
لماذا؟ دون أقواس، يتبع الشرط أمر واحد فقط هو الأمر الذي يليه. والمترجم يتجاهل الإزاحة تمامًا، فهي للقارئ وحده. لذلك يُطبع Well done حتى للراسب.
أين ذهب if؟
يريد البرنامج طباعة سطرين عند النجاح. أضف ما ينقصه.
public class TwoLines {
public static void main(String[] args) {
int mark = 75;
if (mark >= 60)
System.out.println("Passed");
System.out.println("Well done");
else
System.out.println("Failed");
}
}'else' without 'if'أظهر التصحيح
public class TwoLines {
public static void main(String[] args) {
int mark = 75;
if (mark >= 60) {
System.out.println("Passed");
System.out.println("Well done");
} else {
System.out.println("Failed");
}
}
}Passed Well done
لماذا؟ انتهى if عند السطر الأول بعده، فصار السطر الثاني أمرًا عاديًا، ولم يجد else شرطًا يتبعه. تشير الرسالة إلى else، مع أن السبب هو الأقواس الناقصة قبله.
متغير يختفي مع نهاية الكتلة
صرّح عن result في مكان يبقى فيه معروفًا حتى سطر الطباعة.
public class BlockScope {
public static void main(String[] args) {
int mark = 75;
if (mark >= 60) {
String result = "Pass";
} else {
String result = "Fail";
}
System.out.println(result);
}
}cannot find symbolأظهر التصحيح
public class BlockScope {
public static void main(String[] args) {
int mark = 75;
String result;
if (mark >= 60) {
result = "Pass";
} else {
result = "Fail";
}
System.out.println(result);
}
}Pass
لماذا؟ المتغير المصرَّح عنه داخل { } يعيش داخلها فقط. فصرّح عنه قبل الكتلة إذا احتجت إليه بعدها.
الفاصلة المنقوطة بعد الشرط تجعل الكتلة تُنفَّذ دائمًا
قيمة x هي 3، فما الناتج؟ انظر جيدًا إلى نهاية سطر if.
public class Semicolon {
public static void main(String[] args) {
int x = 3;
if (x > 5);
{
System.out.println("x is big");
}
System.out.println("End");
}
}أظهر الناتج
x is big End
لماذا؟ الفاصلة المنقوطة وحدها أمر فارغ لا يفعل شيئًا، وهذا الأمر الفارغ هو ما يتبع الشرط. أما الكتلة بعده فمستقلة تمامًا، فتُنفَّذ دائمًا، ولا يعترض المترجم لأن هذا كله صحيح نحويًا.
شاهد الفخ بعينيك
اضغط «تتبّع سطرًا سطرًا»: الشرط false لكن البرنامج يدخل الكتلة مع ذلك. ثم احذف الفاصلة المنقوطة بعد الشرط وتتبّعه مرة أخرى.
public class VotingAge {
public static void main(String[] args) {
int age = 15;
if (age >= 18); {
System.out.println("You may vote");
}
}
}You may vote
الخطأ نفسه، لكن المترجم يراه الآن
وجود else يكشف الفخ. أصلح السطر حتى يطبع البرنامج Small.
public class BigSmall {
public static void main(String[] args) {
int x = 3;
if (x > 5); {
System.out.println("Big");
} else {
System.out.println("Small");
}
}
}'else' without 'if'أظهر التصحيح
public class BigSmall {
public static void main(String[] args) {
int x = 3;
if (x > 5) {
System.out.println("Big");
} else {
System.out.println("Small");
}
}
}Small
لماذا؟ انتهى if عند الفاصلة المنقوطة، ثم جاءت كتلة مستقلة، فلم يجد else شرطًا يتصل به. فإذا رأيت هذه الرسالة، فافحص نهاية سطر if أولًا.
العوامل && و|| و! تصنع من الشروط شرطًا واحدًا
&& (و)صحيح فقط إذا تحقق الطرفان معًا.
hasId && paidFees|| (أو)صحيح إذا تحقق طرف واحد على الأقل.
isHoliday || isWeekend! (ليس)يقلب القيمة: true تصبح false، والعكس.
!paidFeesa | b | a && b | a || b | !a |
|---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
جدول الصواب بيديك
غيّر قيمتي hasId وpaidFees إلى كل الحالات الأربع، وتوقّع النتائج الثلاث قبل كل تشغيل، ثم قارنها بالجدول.
public class LogicTable {
public static void main(String[] args) {
boolean hasId = true;
boolean paidFees = false;
System.out.println(hasId && paidFees);
System.out.println(hasId || paidFees);
System.out.println(!paidFees);
}
}false true true
شرطان في if واحد
يدخل الطالب المكتبة إذا كان معه بطاقة ولم يكن عليه كتب متأخرة. غيّر lateBooks إلى 2 وتوقّع الناتج. ثم استخدم «تتبّع سطرًا سطرًا» لترى الفرع الذي ينفَّذ.
public class Library {
public static void main(String[] args) {
boolean hasCard = true;
int lateBooks = 0;
if (hasCard && lateBooks == 0) {
System.out.println("Welcome");
} else {
System.out.println("Please see the librarian");
}
}
}Welcome
تُنفَّذ ! أولًا، ثم &&، ثم ||، والأقواس تغيّر هذا الترتيب
السطران الأولان يختلفان في الأقواس فقط. ماذا يطبع البرنامج؟
public class LogicOrder {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = false;
System.out.println(a || b && c);
System.out.println((a || b) && c);
System.out.println(!a || b);
}
}أظهر الناتج
true false false
لماذا؟ في الأول تسبق && العامل ||، فنحسب b && c أولًا وناتجها false، ثم true || false أي true. والأقواس في الثاني تفرض || أولًا فتصبح true && false. وفي الثالث يُقلب a أولًا: false || false.
«يساوي 6 أو 7» كما نقولها
نقولها هكذا بالكلام، لكن Java تريد شرطًا كاملًا على كل طرف من طرفي ||.
public class Weekend {
public static void main(String[] args) {
int day = 7;
if (day == 6 || 7) {
System.out.println("Weekend");
}
}
}bad operand types for binary operator '||'أظهر التصحيح
public class Weekend {
public static void main(String[] args) {
int day = 7;
if (day == 6 || day == 7) {
System.out.println("Weekend");
}
}
}Weekend
لماذا؟ الطرف الأيمن هنا هو العدد 7 وحده، وهو ليس boolean، والعامل || لا يقبل إلا قيمًا منطقية. لهذا تذكر الرسالة أنواع الطرفين.
أي شرط يعني الشيء نفسه مثل !(x > 5)؟
x < 5 غير كافٍ.تتوقف Java عن الحساب فور معرفة النتيجة، وهذا يحمينا من القسمة على صفر
| التعبير | الطرف الأيسر | هل يُحسب الطرف الأيمن؟ | السبب |
|---|---|---|---|
a && b | false | لا | النتيجة false مهما كان الطرف الأيمن |
a && b | true | نعم | النتيجة تعتمد عليه |
a || b | true | لا | النتيجة true مهما كان الطرف الأيمن |
a || b | false | نعم | النتيجة تعتمد عليه |
الحارس قبل القسمة
شغّل البرنامج وهو يعمل بأمان. ثم بدّل طرفي && ليصبح الشرط total / students > 10 && students != 0 وشغّله من جديد: سينهار البرنامج باستثناء ArithmeticException: / by zero، لأن القسمة حدثت قبل الفحص.
public class GuardDivision {
public static void main(String[] args) {
int total = 90;
int students = 0;
if (students != 0 && total / students > 10) {
System.out.println("High average");
} else {
System.out.println("No high average");
}
}
}No high average
العدد count صفر، وفي الشرط قسمة عليه. ماذا يحدث؟
public class OrGuard {
public static void main(String[] args) {
int count = 0;
if (count == 0 || 10 / count > 1) {
System.out.println("Safe");
}
System.out.println("End");
}
}أظهر الناتج
Safe End
لماذا؟ الطرف الأيسر true، وهذا يكفي لتكون نتيجة || هي true، فلا تُحسب القسمة أبدًا.
أي شرط آمن عندما تكون n صفرًا؟
&&: إذا كانت n صفرًا كان الطرف الأيسر false فتُلغى القسمة. وفي الخيار الثالث يكون الطرف الأيسر false أيضًا، لكن || تحتاج عندها إلى حساب الطرف الأيمن، فتحدث القسمة.فحص المدى يحتاج إلى مقارنتين يصل بينهما &&
الرياضيات ليست Java
نكتب في الرياضيات 60 ≤ x ≤ 100. أصلح الشرط بطريقة Java.
public class RangeCheck {
public static void main(String[] args) {
int mark = 75;
if (60 <= mark <= 100) {
System.out.println("Passing mark");
}
}
}bad operand types for binary operator '<='أظهر التصحيح
public class RangeCheck {
public static void main(String[] args) {
int mark = 75;
if (mark >= 60 && mark <= 100) {
System.out.println("Passing mark");
}
}
}Passing mark
لماذا؟ تحسب Java من اليسار: ناتج 60 <= mark هو true، ثم تحاول حساب true <= 100، ولا معنى لمقارنة قيمة منطقية بعدد. لذلك تذكر الرسالة الأنواع boolean وint.
العلامة 150، والمبرمج استخدم || بدلًا من &&. ماذا يطبع؟
public class WrongRange {
public static void main(String[] args) {
int mark = 150;
if (mark >= 0 || mark <= 100) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
}
}أظهر الناتج
Valid
لماذا؟ كل عدد إما أكبر من أو يساوي 0، وإما أصغر من أو يساوي 100، فهذا الشرط true دائمًا. جرّب تعويض قيم على الحدود وخارجها كلما كتبت شرطًا لمدى.
عمر صالح
اقرأ عمرًا صحيحًا. اطبع Valid age إذا كان من 0 إلى 120 شاملًا الطرفين، وإلا فاطبع Invalid age. لا تطبع أي رسالة تطلب الإدخال.
import java.util.Scanner;
public class ValidAge {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Read the age, then check the range
}
}19
Valid age
تلميح 1
«شاملًا الطرفين» تعني >= و<=، وليس > و<.
تلميح 2
استخدم &&: يجب أن يتحقق الحدان معًا.
الحل
import java.util.Scanner;
public class ValidAge {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int age = input.nextInt();
if (age >= 0 && age <= 120) {
System.out.println("Valid age");
} else {
System.out.println("Invalid age");
}
}
}تُقارَن النصوص بالدالة equals، وليس بالعامل ==
== مع النصوصيسأل: هل هذان المتغيران يشيران إلى الكائن نفسه في الذاكرة؟
answer == "yes"equalsيسأل: هل الحروف في النصين هي نفسها؟ وهذا ما تريده دائمًا تقريبًا.
answer.equals("yes")نص من لوحة المفاتيح
أعطينا البرنامج الكلمة yes مدخلًا. يطبع == القيمة false مع أن الحروف متطابقة، لأن Scanner صنع نصًا جديدًا في مكان آخر من الذاكرة.
import java.util.Scanner;
public class CompareInput {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String answer = input.next();
System.out.println(answer == "yes");
System.out.println(answer.equals("yes"));
}
}false true
ثلاث مقارنات لنصوص حروفها واحدة. ماذا يطبع البرنامج؟
public class StringCompare {
public static void main(String[] args) {
String a = "java";
String b = "java";
String c = new String("java");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a.equals(c));
}
}أظهر الناتج
true false true
لماذا؟ تجعل Java النصين الحرفيين المتطابقين كائنًا واحدًا، فيعطي a == b القيمة true، وأما new فتصنع كائنًا جديدًا. ولهذا يبدو == صحيحًا في برامج التجربة، ثم يخطئ حين يأتي النص من المستخدم. لذلك استخدم equals دائمًا.
حالة الأحرف مهمة
أدخل المستخدم YES. لاحظ الفرق بين equals وequalsIgnoreCase، ثم استخدم ! لتطبع Not yes عندما لا يتطابق النصان.
import java.util.Scanner;
public class IgnoreCase {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String answer = input.next();
System.out.println(answer.equals("yes"));
System.out.println(answer.equalsIgnoreCase("yes"));
}
}false true
كلمة المرور
اقرأ كلمة واحدة باستخدام next. اطبع Welcome إذا كانت تساوي java123 تمامًا، وإلا فاطبع Wrong password. لا تطبع أي رسالة تطلب الإدخال.
import java.util.Scanner;
public class SecretWord {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Read the word, then compare it
}
}java123
Welcome
تلميح 1
إذا فشل الاختبار الأول فقط، فأنت تستخدم == على الأرجح.
تلميح 2
password.equals("java123") تعطي قيمة boolean تضعها داخل if مباشرة.
الحل
import java.util.Scanner;
public class SecretWord {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String password = input.next();
if (password.equals("java123")) {
System.out.println("Welcome");
} else {
System.out.println("Wrong password");
}
}
}الأكبر من عددين: احفظ إجابتك في متغير ثم صحّحها إذا لزم
تتبّع المتغير max
اضغط «تتبّع سطرًا سطرًا» وراقب الصندوق max. ثم بدّل قيمتي a وb: هل يبقى الناتج صحيحًا؟ وهل ينفَّذ الفرع هذه المرة؟
public class Largest {
public static void main(String[] args) {
int a = 12;
int b = 30;
int max = a;
if (b > max) {
max = b;
}
System.out.println("Largest: " + max);
}
}Largest: 30
الأكبر من عددين
اقرأ عددين صحيحين، ثم اطبع الأكبر بينهما وحده. إذا تساويا فاطبع أيًا منهما. لا تطبع أي رسالة تطلب الإدخال.
import java.util.Scanner;
public class LargestOfTwo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Read two numbers and print the larger
}
}3 8
8
تلميح 1
لا تستخدم max = 0 قيمة ابتدائية، وإلا فشل برنامجك مع الأعداد السالبة.
تلميح 2
ابدأ بـ int max = a; ثم استخدم if واحدًا.
الحل
import java.util.Scanner;
public class LargestOfTwo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int b = input.nextInt();
int max = a;
if (b > max) {
max = b;
}
System.out.println(max);
}
}التمرين النهائي: برنامج يجمع كل ما تعلمناه
هل يدخل الطالب الامتحان؟
اقرأ نسبة الحضور عددًا صحيحًا، ثم كلمة yes أو no تبيّن هل دفع الطالب الرسوم. اطبع Allowed إذا كان الحضور 75 أو أكثر وكانت الكلمة yes، وإلا فاطبع Not allowed. لا تطبع أي رسالة تطلب الإدخال.
import java.util.Scanner;
public class ExamEntry {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Read the attendance with nextInt and the word with next
}
}90 yes
Allowed
تلميح 1
تحتاج إلى && يجمع مقارنة عددية وequals.
تلميح 2
الشرط كاملًا: attendance >= 75 && paid.equals("yes").
الحل
import java.util.Scanner;
public class ExamEntry {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int attendance = input.nextInt();
String paid = input.next();
if (attendance >= 75 && paid.equals("yes")) {
System.out.println("Allowed");
} else {
System.out.println("Not allowed");
}
}
}أسئلة المراجعة
ما الفرق بين x = 5 وx == 5؟
= يغيّر الصندوق، و== يسأل عن محتواه دون أن يغيّره، وناتجه boolean.كيف تفحص أن x بين 1 و10 شاملًا الطرفين؟
true دائمًا، وأما && فتطلب تحقق الحدين معًا.أي شرط يفحص أن النص name ليس Ali؟
equals تعطي boolean، والعامل ! يقلبها. أما != فيقارن مواقع الكائنات في الذاكرة كما يفعل ==، وليس الحروف.تتبّع الشروط بدقة: ماذا يطبع البرنامج؟
public class ReviewCombo {
public static void main(String[] args) {
int x = 8;
if (x > 5 && x % 2 == 1) {
System.out.println("A");
} else {
System.out.println("B");
}
if (x > 10 || !(x == 3)) {
System.out.println("C");
}
System.out.println("D");
}
}أظهر الناتج
B C D
لماذا؟ 8 زوجي، فالشرط الأول false ويُطبع B. وفي الثاني x > 10 غير صحيح، لكن x ليست 3، فيكفي هذا لتحقق || ويُطبع C. أما D فخارج كل الكتل.