شارك المقالة

لإنشاء آلة حاسبة بسيطة بلغة Java نحتاج إلى قراءة عددين، ثم قراءة رمز العملية وتنفيذ الفرع المناسب باستخدام switch. المثال التالي يعمل في الطرفية ويغطي الجمع والطرح والضرب والقسمة، مع التحقق من الإدخال ومنع القسمة على صفر. لا يحتاج إلى مكتبات خارجية أو واجهة رسومية.

طريقة تشغيل البرنامج

احفظ الملف باسم Calculator.java؛ يجب أن يطابق اسم الملف اسم الكلاس العام. افتح الطرفية في المجلد نفسه، ثم نفّذ javac Calculator.java وبعده java Calculator. أدخل عددين، كل منهما في سطر أو افصل بينهما بمسافة، ثم اكتب أحد الرموز + أو - أو * أو /. استخدم النقطة لكتابة الجزء العشري، مثل 12.5.

كود آلة حاسبة Java باستخدام switch وScanner

import java.util.Locale;
import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        try (Scanner input = new Scanner(System.in)) {
            input.useLocale(Locale.US);
            System.out.println("Enter the first number, then the second number:");
            if (!input.hasNextDouble()) {
                System.out.println("Invalid first number.");
                return;
            }
            double first = input.nextDouble();
            if (!input.hasNextDouble()) {
                System.out.println("Invalid second number.");
                return;
            }
            double second = input.nextDouble();
            if (!Double.isFinite(first) || !Double.isFinite(second)) {
                System.out.println("Use finite numbers only.");
                return;
            }
            System.out.println("Enter an operator: + - * /");
            if (!input.hasNext()) return;
            String operator = input.next();
            double result;
            switch (operator) {
                case "+": result = first + second; break;
                case "-": result = first - second; break;
                case "*": result = first * second; break;
                case "/":
                    if (second == 0.0) {
                        System.out.println("Cannot divide by zero.");
                        return;
                    }
                    result = first / second;
                    break;
                default:
                    System.out.println("Unknown operator.");
                    return;
            }
            if (!Double.isFinite(result)) {
                System.out.println("Result is outside the supported range.");
                return;
            }
            System.out.println(first + " " + operator + " " + second + " = " + result);
        }
    }
}

كيف يعمل الكود؟

يستخدم البرنامج Scanner لقراءة المدخلات وhasNextDouble() للتحقق من العدد قبل قراءته. اختيار double يسمح بنتائج عشرية؛ فمثلًا قسمة 5 على 2 تعطي 2.5 بدلًا من اقتطاع الكسر كما يحدث عند قسمة عددين صحيحين. يضبط Locale.US الفاصل العشري على النقطة حتى يكون المثال واضحًا على الأجهزة المختلفة.

يفحص switch رمز العملية، وينفذ فرعًا واحدًا. تمنع break الانتقال إلى الفرع التالي، بينما ينهي return البرنامج عند وجود خطأ. يغطي default الرموز غير المدعومة، لذلك لا تُستعمل قيمة غير مهيأة للنتيجة. ويُغلق Scanner تلقائيًا عند الخروج من كتلة try.

لماذا نتحقق من القسمة على صفر؟

القسمة العشرية على صفر في Java قد تنتج Infinity أو NaN بدل رسالة مناسبة للمستخدم. لهذا نفحص المقسوم عليه قبل العملية، ولا نكتفي بالاعتماد على الاستثناءات. ونرفض كذلك القيم غير المحدودة، ثم نفحص النتيجة لأن ضرب قيم كبيرة جدًا قد يتجاوز مجال double. هذا مثال تعليمي للحساب العشري؛ عند بناء تطبيق مالي يحتاج إلى تقريب عشري مضبوط، ينبغي دراسة BigDecimal وقواعد التقريب المطلوبة.

حالات اختبار للمخرجات

العدد الأولالثانيالعمليةالنتيجة
52/2.5
-38+5.0
100/رسالة منع القسمة على صفر
42%رمز عملية غير مدعوم

أخطاء شائعة وتطوير المثال

إذا ظهر خطأ في اسم الكلاس، راجع اسم الملف وحالة الأحرف. وإذا رفض البرنامج قيمة مثل 3,5 فاكتبها 3.5. لا تضف سطر package إلا إذا وضعت الملف في هيكل المجلدات المناسب. ويمكنك لاحقًا إضافة حلقة لإجراء أكثر من عملية أو فصل كل عملية في دالة، ثم تجربة واجهة Swing في مشروع مستقل بعد فهم نسخة الطرفية.

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع