المقارنة والمشغلات المنطقية
تعلم كيفية مقارنة القيم.
سنغطي ما يلي...
المقارنة والمشغلات المنطقية
نعرف كيفية استخدام الدوال المدمجة، بالإضافة إلى تعريف دوالنا الخاصة. نعرف أيضًا كيفية أخذ إدخال من المستخدم وتعيينها متغير للتخزين (وإعادة الاستخدام) أو تمريرها إدخال إضافية إلى دالة. نعرف أيضًا كيفية إخراج شيء ما على الشاشة للمستخدم. ولكن لا يمكننا كتابة برامج متسلسلة إلا في هذه المرحلة، حيث يقوم الحاسوب بجلب وتنفيذ سطر من الكود الخاص بنا، من أول سطر قابل للتنفيذ من الدالة الرئيسية إلى آخر سطر، بترتيب تسلسلي صارم.
هذا يُزودنا بالمهارات اللازمة لحل العديد من المشكلات الشيقة، ولكن لا تزال هناك بعض المشكلات التي لا تستطيع البرامج المتسلسلة حلها. في بعض الأحيان، قد يتطلب الحل تنفيذًا غير متتالي أيضًا:
يتناول هذا الفصل تعلم كيفية كتابة برامج يمكنها، أثناء تنفيذها، أن تكون انتقائية في تنفيذ أسطر الكود. ثانيًا، سنتعلم كتابة برامج يمكنها تنفيذ بعض أسطر الكود عدة مرات. سيتطلب مشروعنا منا أن نكون قادرين على البرمجة بهذه الطريقة.
متطلبات المشروع
دعونا نتناول متطلبات عميلنا للمشروع مرة أخرى، وهذه المرة نركز على المتطلبات البارزة للإعلان عن النتيجة الصحيحة للمستخدم.
تخيل أن أليكس، طالبة في المرحلة الابتدائية، تستخدم تطبيقنا وتنجح في الإجابة على ثلاثة أسئلة بشكل صحيح. وعندما تستخدم بيتي، طالبة أخرى، تطبيقنا، تجيب على جميع الأسئلة الخمسة بشكل صحيح. لن نكتب برنامجين مختلفين - أحدهما لأليكس والآخر لبيتي. ولكن يجب أن يحسب نفس الكود أن درجة أليكس هي 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
هل هو صحيح؟ لأنه إذا تأكدنا من صحته، فعلينا تحديث درجة المستخدم بمقدار ١. السطر ٩ يدعوك؛ ما الذي يمكن فعله هناك مباشرةً بعد أن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". عند التنفيذ، يتم طباعة السطر 10True
أولا، ثم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
مع ذلك، يتطلب مشروع عميلنا من برمجتنا تحديث النتيجة فقط إذا أجاب المستخدم على السؤال بشكل صحيح، وليس في غير ذلك. كيف نفعل ذلك؟ لننتقل إلى الدرس التالي.