مشروع صغير في Java | آلة حاسبة بسيطة (شرح خطوة بخطوة)
25:00 دقائق
مجاني
مشروع تطبيقي للمبتدئين جدًا: آلة حاسبة تستقبل رقمين وعملية (+ - * /) وتطبع النتيجة مع التحقق من الأخطاء مثل القسمة على صفر.
هذا المشروع الصغير هدفه أن يجمع لك عدة مفاهيم تعلمتها حتى الآن في برنامج واحد:
- متغيرات وأنواع بيانات
- إدخال المستخدم
- شروط if/else
- استخدام String والمقارنة بـ equals
سنصنع آلة حاسبة تسأل المستخدم عن رقمين، ثم تسأله عن العملية، ثم تطبع الناتج.
فكرة البرنامج قبل كتابة الكود
قبل أن نكتب الكود، نفكر بالخطوات:
- اطلب من المستخدم إدخال الرقم الأول.
- اطلب من المستخدم إدخال الرقم الثاني.
- اطلب منه اختيار العملية (+ أو - أو * أو /).
- نفّذ العملية المناسبة.
- اطبع النتيجة.
- إذا اختار قسمة والرقم الثاني صفر، اطبع رسالة خطأ بدل أن ينفجر البرنامج.
الكود الكامل للمشروع
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("أدخل الرقم الأول: ");
double a = in.nextDouble();
System.out.print("أدخل الرقم الثاني: ");
double b = in.nextDouble();
System.out.print("اختر العملية (+ - * /): ");
String op = in.next();
double result;
if (op.equals("+")) {
result = a + b;
} else if (op.equals("-")) {
result = a - b;
} else if (op.equals("*")) {
result = a * b;
} else if (op.equals("/")) {
if (b == 0) {
System.out.println("لا يمكن القسمة على صفر.");
return;
}
result = a / b;
} else {
System.out.println("عملية غير صحيحة.");
return;
}
System.out.println("النتيجة: " + result);
}
}
شرح نقاط مهمة داخل الكود
Scanner: أداة لقراءة إدخال المستخدم من لوحة المفاتيح.nextDouble(): لقراءة رقم عشري (ويقبل الصحيح أيضًا).String op = in.next();: لقراءة العملية ككلمة/رمز.- استخدمنا
equalsلمقارنة النص (الرمز) مثل "+" و "-". - تحققنا من القسمة على صفر قبل تنفيذ القسمة.
- استخدمنا
returnلإنهاء البرنامج عند الخطأ.
تطويرات بسيطة (تمارين للمبتدئ)
جرّب تطوير المشروع بهذه الأفكار (ولو ببطء):
- أضف عملية باقي القسمة
%للأعداد الصحيحة. - اجعل البرنامج يعيد السؤال أكثر من مرة باستخدام حلقة
while. - أضف رسالة ترحيب في البداية ورسالة وداع في النهاية.
أخطاء شائعة وكيف تتجنبها
- نسيان import الخاص بـ Scanner.
- مقارنة العملية باستخدام
==بدلequals. - عدم التحقق من القسمة على صفر.
✅ جميل جدًا. الآن سنخطو خطوة أخرى في OOP: سنجعل الكلاس لا يحتوي بيانات فقط، بل يحتوي “سلوكًا” أيضًا عبر Methods داخل الكلاس.