يمكن معرفة العدد الموجب والسالب والصفر في Java بمقارنة القيمة مع الصفر. العدد الأكبر من الصفر موجب، والأصغر منه سالب، أما القيمة التي تساويه فلها حالة مستقلة. هذا الدرس يوضح ترتيب شروط if وelse if مع قراءة العدد من المستخدم، بدل الاكتفاء بقيمة ثابتة داخل الكود.
كود كامل لقراءة العدد وتحديد نوعه
احفظ المثال باسم PositiveNegative.java ثم شغّله بالأمرين javac PositiveNegative.java وjava PositiveNegative. يقبل المثال الأعداد العشرية المكتوبة بنقطة، مثل -12.5، ولا يحتاج إلى أي مكتبة خارج Java.
import java.util.Locale;
import java.util.Scanner;
public class PositiveNegative {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
input.useLocale(Locale.US);
System.out.println("Enter a number:");
if (!input.hasNextDouble()) {
System.out.println("Invalid number.");
return;
}
double number = input.nextDouble();
if (!Double.isFinite(number)) {
System.out.println("Use a finite number.");
} else if (number > 0.0) {
System.out.println("Positive");
} else if (number < 0.0) {
System.out.println("Negative");
} else {
System.out.println("Zero");
}
}
}
}شرح الشروط خطوة بخطوة
نتحقق أولًا أن الإدخال يمكن قراءته بوصفه عددًا عشريًا. إذا كتب المستخدم كلمة بدل رقم، نعرض رسالة واضحة وننهي البرنامج. ثم نرفض القيم الخاصة غير المحدودة؛ لأن مقارنة NaN مثلًا لا تتبع المقارنات المعتادة، وقد يؤدي وضعها في فرع else إلى وصفها خطأ بأنها صفر.
بعد قبول القيمة، يختبر الشرط الأول number > 0.0. إذا تحقق لا تُنفّذ الفروع التالية. وإلا نختبر number < 0.0، ثم نصل إلى فرع الصفر فقط عندما لا تكون القيمة أكبر منه ولا أصغر منه. تنتمي القيمتان 0.0 و-0.0 إلى نتيجة الصفر في هذا المثال لأنهما متساويتان بالمقارنة العددية المستخدمة هنا.
أمثلة وحالات اختبار
| الإدخال | المخرج |
|---|---|
| 12.3 | Positive |
| -7 | Negative |
| 0 | Zero |
| -0.0 | Zero |
| abc | Invalid number. |
أخطاء شائعة في مقارنة الإشارة
لا تستخدم شرط number >= 0 إذا أردت فصل الصفر عن الأعداد الموجبة، لأنه سيضم الصفر إليها. ولا تكتب ثلاثة شروط منفصلة إذا كانت الحالات بدائل حصرية؛ سلسلة else if توضّح العلاقة بينها وتمنع تنفيذ فروع لا نحتاجها. كذلك، لا تخلط بين تحديد إشارة العدد ومعرفة كونه زوجيًا أو فرديًا: اختبار الزوجية يعتمد على باقي القسمة ويخص الأعداد الصحيحة.
متى نستخدم int بدل double؟
إذا كان التمرين يقبل الأعداد الصحيحة فقط، يمكنك استعمال hasNextInt() وnextInt() وتغيير نوع المتغير إلى int. تبقى مقارنات الإشارة نفسها. أما استخدام double هنا فيسمح بالتدرب على قيم مثل 0.25 و-0.5. وعندما تصبح القيمة ناتج حسابات عشرية تقريبية، قد تحتاج إلى تعريف دقة مناسبة للمسألة قبل اختبار قربها من الصفر؛ لا تختَر حدًا تقريبيًا عشوائيًا لجميع التطبيقات.
تمرين للتطبيق
ضع منطق تحديد الإشارة في دالة ترجع نصًا، ثم استدعها لعدة قيم داخل حلقة. اختبر قيمة موجبة وقيمة سالبة والصفر قبل الانتقال إلى تمارين المقارنة بين عدة أعداد. بهذه الطريقة تفصل قراءة المدخلات عن منطق القرار ويسهل اختبار الدالة لاحقًا.





