المقارنة والمشغلات المنطقية
تعلم كيفية مقارنة القيم.
سنغطي ما يلي...
المقارنة والمشغلات المنطقية
نعرف كيفية استخدام الدوال المدمجة، بالإضافة إلى تعريف دوالنا الخاصة. نعرف أيضًا كيفية أخذ إدخال المستخدم وتخصيصها متغير للتخزين (وإعادة الاستخدام) أو تمريرها إدخال إضافية إلى دالة. نعرف أيضًا كيفية إخراج شيء ما على الشاشة للمستخدم. ولكن لا يمكننا كتابة برامج متسلسلة إلا في هذه المرحلة، حيث يقوم الحاسوب بجلب وتنفيذ سطر من الكود الخاص بنا، من أول سطر قابل للتنفيذ من الدالة الرئيسية إلى آخر سطر، بترتيب تسلسلي صارم.
هذا يُزودنا بالمهارات اللازمة لحل العديد من المشاكل الشيقة، ولكن لا تزال هناك بعض المشاكل التي لا تستطيع البرامج المتسلسلة حلها. في بعض الأحيان، قد يتطلب الحل تنفيذًا غير متتالي أيضًا:
يتناول هذا الفصل تعلم كيفية كتابة برامج يمكنها، أثناء تنفيذها، أن تكون انتقائية في تنفيذ أسطر الكود. ثانيًا، سنتعلم كتابة برامج يمكنها تنفيذ بعض أسطر الكود عدة مرات. سيتطلب مشروعنا منا أن نكون قادرين على البرمجة بهذه الطريقة.
متطلبات المشروع
دعونا نتناول متطلبات عميلنا للمشروع مرة أخرى، وهذه المرة نركز على المتطلبات البارزة للإعلان عن النتيجة الصحيحة للمستخدم.
تخيل أن أليكس، طالبة في المرحلة الابتدائية، تستخدم تطبيقنا وتنجح في الإجابة على ثلاثة أسئلة بشكل صحيح. وعندما تستخدم بيتي، طالبة أخرى، تطبيقنا، تجيب على جميع الأسئلة الخمسة بشكل صحيح. لن نكتب برنامجين مختلفين - أحدهما لأليكس والآخر لبيتي. ولكن يجب أن يحسب نفس الكود أن درجة أليكس هي 3 ودرجة بيتي هي 5.
بالطبع، لا يستطيع تطبيقنا معرفة النتيجة النهائية لمستخدمه مسبقًا. سيعرفها برنامجنا فقط أثناء تنفيذ أليكس وبيتي الكود، على التوالي.
ملحوظة: كيف يعرف الكود إذا كان المستخدم قد أدخل الإجابة الصحيحة للسؤال؟
حتى الآن، رأينا كيفية حساب الإجابة المتوقعة الصحيحة، في حالة وجود سؤال؛ على سبيل المثال، إذا كان السؤال 4 * 7
:
import java.util.Scanner; public class MyJavaApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("What is 4 * 7? "); int userAnswer = scan.nextInt(); int correctAnswer = 4 * 7; } }
لدينا إذًا رقمان في متغيرين بأسماء مناسبة. كيف نعرف أن userAnswer
صحيحة؟ لأنه إذا تأكدنا من صحتها، فسنحتاج إلى تحديث درجة المستخدم بمقدار 1. السطر 9 يدعوك؛ ماذا يمكنك فعله هناك مباشرةً بعد أن يكون لدينا correctAnswer
و userAnswer
؟
حسنًا، نعلم ما يدور في ذهنك. أنت تعتقد أن الأمر بسيط، يكفي مقارنة الرقمين لمعرفة إن كانا متساويين أم لا!
حسنًا، لدينا رمز للمساواة، نعرفه منذ الصغر، لكننا نستخدمه في Java لتعيين قيمة متغير. حتى أننا استخدمناه في السطرين 7 و8 . ولكن لم لا نجرب ونستخدمه لمقارنة رقمين أيضًا لنتأكد من تساويهما؟
import java.util.Scanner; public class MyJavaApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("What is 4 * 7? "); int userAnswer = scan.nextInt(); int correctAnswer = 4 * 7; userAnswer = correctAnswer; } }
هل لم ينجح الأمر كما هو مخطط له، أم أنه لم ينجح؟ كيف لنا أن نعرف؟ علينا أن نكون قادرين على اختبار فرضياتنا. ماذا لو أضفنا عبارة print
قبل وبعد السطر العاشر ؟ بهذه الطريقة، قد نعرف ما يفعله userAnswer = correctAnswer
.
import java.util.Scanner; public class MyJavaApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("What is 4 * 7? "); int userAnswer = scan.nextInt(); int correctAnswer = 4 * 7; System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); userAnswer = correctAnswer; System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); } }
أدخل "28" ويبدو أنه يعمل! لكن أعد تشغيله. هذه المرة، أعطِ إجابة خاطئة، لنفترض "20"، وانظر ماذا سيحدث! من الواضح أن السطر العاشر يُعيّن قيمة في correctAnswer
إلى userAnswer
. لكننا أردنا استخدام =
للتحقق مما إذا كان الرقمان متساويين أم لا.
المساواة وليس التعيين
بما أن Java تستخدم =
مفردة لأغراض التعيين، فما هو الخيار الأمثل التالي لمعامل المساواة؟ ماذا عن مضاعفة يساوي ==
؟
import java.util.Scanner; public class MyJavaApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("What is 4 * 7? "); int userAnswer = scan.nextInt(); int correctAnswer = 4 * 7; System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); userAnswer == correctAnswer; System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); } }
ومع ذلك، نحتاج إلى تغليف الكود الموجود في السطر 10 داخل print
على أمل معرفة ما كان ==
يفعله.
import java.util.Scanner; public class MyJavaApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("What is 4 * 7? "); int userAnswer = scan.nextInt(); int correctAnswer = 4 * 7; System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); System.out.println(userAnswer == correctAnswer); System.out.println("User's answer: " + userAnswer + " Correct answer: " + correctAnswer); } }
شغّله لـ "28" ثم "20". عند التنفيذ، يطبع السطر العاشر True
أولًا، ثم False
. هذا هو عامل المقارنة الذي أردناه!
غالبًا ما يستخدم المبرمجون print
لتشخيص برامجهم.
كلمة أخيرة عن ==
من الناحية المفاهيمية، فكر في ==
كطريقة مضمنة أخرى تأخذ رقمين وترجع True
أو False
.
مشغلات المقارنة الأخرى
لقد رأينا ==
بكامل تجلياتها. هناك عوامل مقارنة أخرى أيضًا:
Comparison Operators
Operators | Description | Example Usage |
| The two numbers are exactly equal. | 2 == 2 would return |
| The two numbers are not equal. | 2 != 2 would return |
| The first number is greater than the second. | 2 > 2 would return |
| The first number is greater than or equal to the second. | 2 >= 2 would return |
| The first number is less than the second. | 2 < 2 would return |
| The first number is less than or equal to the second. | 2 <= 2 would return |
كيف نقوم بتحديث درجة المستخدم؟
الآن، نعرف كيفية مقارنة userAnswer
بالإجابة correctAnswer
لضمان المساواة. نعرف أيضًا كيفية تحديث النتيجة بمقدار 1 ( score = score + 1
). مع ذلك، يتطلب مشروع عميلنا من شيفرتنا تحديث النتيجة فقط إذا أجاب المستخدم على السؤال بشكل صحيح، وليس في غير ذلك. كيف نفعل ذلك؟ لننتقل إلى الدرس التالي.