شارك المقالة

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

ما الذي سينفذه البرنامج؟

يطلب البرنامج من المستخدم اسمه الكامل، ثم عمره كعدد صحيح، ثم دخله الشهري كعدد عشري. بعد ذلك يطبع ملخصًا منسقًا. سنستخدم String للاسم، وint للعمر، وdouble للدخل. قيمة الدخل هنا رقم فقط؛ يختار التطبيق العملة المناسبة حسب البلد بدل افتراض أن كل المستخدمين يستخدمون الدولار.

كود Java كامل لقراءة الاسم والعمر والدخل

أنشئ ملفًا باسم UserDetails.java والصق فيه المثال التالي:

import java.util.Scanner;

public class UserDetails {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter your full name: ");
        String name = input.nextLine().trim();

        System.out.print("Enter your age: ");
        int age = input.nextInt();

        System.out.print("Enter your monthly income: ");
        double income = input.nextDouble();

        if (name.isEmpty() || age < 0 || income < 0) {
            System.out.println("Please enter valid values.");
        } else {
            System.out.println("\nUser details");
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);
            System.out.printf("Monthly income: %.2f%n", income);
        }

        input.close();
    }
}

يشغّل المثال على Java 8 وما بعدها. احرص على أن يطابق اسم الملف اسم الفئة العامة UserDetails. عند إدخال اسم كامل مثل «أحمد محمد» ستتم قراءته كله، ثم تُعرض القيمة العشرية برقمين بعد الفاصلة. يمكنك تغيير نصوص الرسائل إلى العربية، كما يمكنك إضافة رمز العملة المناسب في سطر الإخراج.

شرح Scanner وأنواع البيانات

توجد الفئة Scanner في الحزمة java.util، لذلك نستوردها في بداية الملف. ينشئ الأمر new Scanner(System.in) قارئًا للمدخلات القادمة من لوحة المفاتيح. تقرأ nextLine سطرًا كاملًا، وهذا مهم للأسماء التي تحتوي على مسافات. أما nextInt فيقرأ عددًا صحيحًا مثل العمر، وnextDouble يقرأ رقمًا عشريًا مثل الدخل.

استخدمنا trim لإزالة المسافات الزائدة من بداية الاسم ونهايته، ثم isEmpty لمنع قبول اسم فارغ. ويمنع الشرط العمر أو الدخل السالب. هذا تحقق بسيط من المجال، لكنه لا يمنع النص غير الرقمي؛ إدخال كلمة بدل رقم قد يسبب InputMismatchException. في التطبيق الأكبر، استخدم hasNextInt وhasNextDouble قبل القراءة واعرض رسالة مناسبة عند الخطأ.

لماذا نقرأ الاسم أولًا؟

تقرأ nextInt وnextDouble الرمز الرقمي وتترك محرف نهاية السطر في المدخلات. إذا استدعيت nextLine مباشرة بعدهما فقد تقرأ بقية السطر الفارغة بدل اسم المستخدم. لهذا المثال نقرأ الاسم أولًا. وإذا احتجت لاحقًا إلى قراءة نص بعد رقم، أضف استدعاءً فارغًا لـ nextLine() لاستهلاك نهاية السطر قبل قراءة النص التالي.

مثال على الإدخال والناتج

عند إدخال الاسم «سارة علي»، ثم العمر 25، والدخل 8500.5، يعرض البرنامج الاسم كما كُتب، والعمر 25، والدخل 8500.50. تنسيق %.2f يحدد منزلتين عشريتين، و%n يطبع سطرًا جديدًا بطريقة تناسب نظام التشغيل. لا تغيّر القيمة المخزنة نفسها؛ إنه تنسيق للعرض فقط.

التعامل مع المدخلات غير الصحيحة

لجعل البرنامج أسهل للاستخدام، اطلب من المستخدم إعادة الإدخال إذا كتب نصًا مكان العمر أو الدخل. قبل nextInt افحص input.hasNextInt()، وقبل قراءة الدخل افحص input.hasNextDouble(). إذا أعادت الدالة false، اقرأ الرمز الخاطئ باستخدام next() ثم اعرض تنبيهًا واطلب قيمة جديدة. في نموذج تعليمي بسيط يكفي توضيح أن المدخلات أعداد، أما تطبيقات الإنتاج فتحتاج إلى حلقة تحقق ورسائل خطأ مناسبة.

تنسيق الناتج واختيار العملة

تعرض System.out.println النصوص والقيم في سطر جديد، بينما يسمح System.out.printf بتنسيق الأرقام. في المثال استخدمنا %.2f حتى لا يظهر عدد طويل من الخانات العشرية. إذا كان التطبيق يخدم مستخدمين من بلدان مختلفة، فلا تكتب رمز عملة ثابتًا داخل البرنامج؛ خزّن العملة المختارة أو استخدم إعدادًا محليًا مناسبًا. كما يجب توضيح ما إذا كان الرقم دخلًا شهريًا أو سنويًا حتى لا يسيء القارئ تفسيره.

تحسينات ممكنة للبرنامج

  • استخدم BigDecimal إذا كانت الحسابات المالية تحتاج دقة عشرية ثابتة، بدل إجراء عمليات مالية كثيرة باستخدام double.
  • استبدل int بـ LocalDate لحساب العمر من تاريخ الميلاد في تطبيق حقيقي، مع مراعاة يوم وشهر الميلاد.
  • أضف التحقق من المدخلات داخل حلقات حتى يستطيع المستخدم إعادة المحاولة بدل توقف البرنامج.
  • لا تحفظ الاسم أو الدخل أو تشاركهما مع خدمة أخرى من دون حاجة واضحة وموافقة المستخدم؛ بيانات الدخل شخصية.

الخلاصة وروابط Java أخرى

يجمع هذا المثال بين قراءة النص باستخدام nextLine والأعداد باستخدام nextInt وnextDouble، ثم يعرض ملخصًا بعد التحقق من القيم الأساسية. راجع بقية شروحات Java، وتعلم الخوارزميات من شرح Selection Sort في Java، أو تابع مثال بنية Stack باستخدام Linked List.

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

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