كيف امنع المستخدم من كتابة الاحرف في الجافا

انظر هذا الكود

هذا عبارة عن برنامج يطلب من المستخدم ادخال مواليده مثل اذا ادخل رقم 2000 فسوف يعرض له عمرك هو 17 ولكن هنا سؤالي ماذا اذا ادخل المستخدم بدل 2000 حرف مثلا a فسوف تحدث اخطاء بالبرنامج فكيف اجبر المستخدم على ادخال الارقام فقط .

package TEXT;

import java.util.Calendar;

import java.util.Scanner;

import java.util.InputMismatchException;

public class Age {

static Scanner reader=new Scanner(System.in);
public static void main(String[] args) {
    System.out.print("Enter Your Bitarth:");
    int age=reader.nextInt();
    int year=Calendar.getInstance().get(Calendar.YEAR);
    int bitarth=year-age;
    System.out.println("Your age is " + (bitarth+1) + " Years");

}

}

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

MEXAFALGE أضف ردا

جرب إضافة جملة شرط لبرنامجك، بحيث ان كانت المدخلات ارقام سيشتغل البرنامج، غير ذلك سيسجل عملية اضافية لا هدف لها، اعتبرها خدعة.

هكذا مثلا:

    if age > 0    
انسخ كودك هنا، غير ذلك سيقوم بالتالي     

  else
    int nothing = 7;    

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

لا لا انا لااريد من المستخدم اغلاق البرنامج واعادة تشغيله

يوجد 2 اختيار

اما ان امنع المستخدم من ادخل الاحرف

او اذا ادخل المستخدم حرف يقوم البرنامج باعدة عرض الكود مرة اخرى الى ان يدخل رقم !

تحتاج تستخدم try-catch داخل لوب

بهذه الطريقة

import java.util.Calendar;

import java.util.Scanner;
public class NewMain {

    static Scanner reader = new Scanner(System.in);
    public static void main(String[] args) {
        int age = 0;
        while (true) {
            try {
                System.out.print("Enter Your birth year:");
                age = reader.nextInt();
                break;
            } catch (Exception ex) {
                System.out.println("wrong valu.. input a number");
                reader = new Scanner(System.in);
            }
        }
        int year = Calendar.getInstance().get(Calendar.YEAR);
        int bitarth = year - age;
        System.out.println("Your age is " + (bitarth + 1) + " Years");
    }
}

اذا كنت تريد شرح لـ try-catch

تابع شرحي هنا

@san3aniJava

مرحبا

شكرا على مجهودك

عندما جربت الكود تبعك يعرض لي:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:

Calendar cannot be resolved
Calendar cannot be resolved to a variable

at TEXT.Age.main(Age.java:18)

نعم لانك ما نسخت اول سطر

سطر

import java.util.Calendar;

راح اجرب واضعه @san3aniJava

الكود شغال 100% بدون أي مشاكل

مضمون

شكرااااااا

@san3aniJava

صارلي شي اسبوع انشر في فيسبوك وحاسوب io وماحصلتش اجابة مفيدة

وانت اول واحد يساعدني ويفيدني والكود اشتغل 100% صحيح

بس ممكن طريقة من خلاله امنع المستخدم اصلا من ادخل الاحرف اي عندما يريد ادخال عمره الاحرف لاتعمل عندما يضغط عليها فقط الارقام تعمل

العفو ولا يهمك

اذا أردت منع المستخدم من ادخال الأحرف

فيجب أن تسأل نفسك سؤال مهم

وهو أين سيدخل المستخدم الأحرف ؟

اذا استخدمت الكلاس Scanner لاخذ البيانات من المستخدم فحينها المستخدم يدخل البيانات في شاشة الكونسل

وشاشة الكونسل شيء مستقل تماماً عن الجافا فلن تستطيع منع المستخدم من إدخال الأحرف إلى شاشة الكونسل إلا عبر الاستعانة بمكتبات خارجية خاصة بنظام التشغيل يمكنها تعطيل ازرار الكيبورد أو شيء من هذا القبيل

لذلك الطريقة الأسهل لك هو أن لا تقرأ البيانات من شاشة الكونسل

اذا أردت أن تتحكم بما يستطيع المستخدم ادخاله وما لا يستطيع ادخاله فعليك أن تعمل واجهة ادخال خاصة ببرنامجك

مثلاً تعمل نافذة وفي النافذة فيه حقل ادخال سنة الميلاد وفيه زر حساب العمر

في هكذا حالة تستطيع بسهولة التحكم بما هو مسموح كتابته في الحقل

بحيث لو المستخدم كتب رقم ينكتب بينما لو كتب حرف لا ينكتب

فهمت كلامي؟

@san3aniJava

اخي فهمتك

ولكن هل يمكنك تطبيق هذا في الكود لو سمحت ؟

اذا كنت لاتستطيع فلامشكلة

لا بأس استطيع

وطبعا يمكن تحقيق ذلك بطرق كثيرة فما ساضعه هنا مجرد مثال

تفضل جرب هذا الكود

import java.awt.BorderLayout;
import java.util.Calendar;
import java.awt.event.*;
import javax.swing.*;

public class TestFrame extends KeyAdapter implements ActionListener {
    static int year = Calendar.getInstance().get(Calendar.YEAR);
    static JTextField tf = new JTextField();
    static JLabel rl = new JLabel("");
    public static void main(String[] args) {
    TestFrame ff =new TestFrame();
    JFrame f = new JFrame();
    JPanel p = new JPanel();
    JLabel l = new JLabel("Enter birth year: ");

    tf.setColumns(10);
    tf.addKeyListener(ff);
    JButton b = new JButton("Calculate Age");
    p.add(l);
    p.add(tf);
    p.add(b);
    b.addActionListener(ff);
    f.getContentPane().add(p, BorderLayout.CENTER);
    JPanel rp = new JPanel();

    rp.add(rl);
    f.getContentPane().add(rp,BorderLayout.SOUTH);

    f.setSize(300,150);
    f.setLocationRelativeTo(null);
    f.setVisible(true);

}

@Override
public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (c < '0' || c > '9') {
        e.consume();
    }
}

@Override
public void actionPerformed(ActionEvent e) {
    if(tf.getText().equals(""))
        return;
    int age = year - Integer.parseInt(tf.getText());
    rl.setText("The age is "+age);
}

}

@san3aniJava

اخي والله ماعرف طريقة اشكرك فيها على مجهودك وصبرك معي

الكود اشتغل 100% تمام

شكرا لك !

@san3aniJava

اخي ماعندك دروس جافا على موقع او قناة يوتيوب او اي شيئ

ولا يهمك أخي العفو

واذا عندك اي سؤال حول الجافا فيسرني مساعدتك

نعم عندي دروس جافا

لدي منتدى اساعد فيه الطلبة

وحاليا لدي دورة في أساسيات البرمجة بلغة الجافا واضع الدورس في قناة في اليوتيوب

هذا

هنا تجد المنتدى وفيه ايضا دروس الدورة

لو تفتح أي درس بتلاقي مقطع اليويتوب التابع للدرس

عندما أنتهي من دورة الأساسيات ساضع إن شاء الله دورات متقدمة

يمكنك التسجيل بالمنتدى ووضع أي أستفسار عن الجافا في القسم المناسب

موفق

مجهول
  • حذف بواسطة المستخدم

سلاسل الأرقام والحروف

فكرة المشروع

برنامج يقوم بعرض مجموعة من سلاسل الأرقام والحروف للمستخدم، ثم يطلب من المستخدم توقع الرقم أو الحرف التالي في السلسلة.

متطلبات وتفاصيل المشروع

عند بداية تشغيل البرنامج، يقوم البرنامج بقراءة بيانات المستخدم وهي )اسم المستخدم، تاريخ ميلاده( ثم بعد ذلك يتم عرض الخيارات

التالية للمستخدم ويطلب منه الخيار:

1 -بدء لعبة جديدة

عند اختيار هذا الخيار )الخيار رقم 1 )يقوم البرنامج بشكل تلقائي بمعالجة سلسلة أرقام أو حروف ثم عرضها على console ثم يطلب

البرنامج من المستخدم تخمين الرقم التالي أو الحرف التالي في السلسلة وادخاله عبر console ،فإذا كان الرقم أو الحرف المدخل

صحيح يقوم البرنامج بطباعة جملة "ممتاز، إجابة صحيحة"، أما إذا كانت اجابته خاطئة يقوم البرنامج بطباعة جملة "إجابة خاطئة "،

وفي كلتا الحالتين تتم إعادة اظهار لغز جديد للمستخدم ليقوم بالإجابة عليه، حتى يقوم المستخدم بإدخال كلمة stop عندها يتوقف

البرنامج، هذه بعض الأمثلة:

1, 3, 5, 7, ?, 11, 13, 15, 17

What is the hidden number?

هذه القيمة التي سيدخلها المستخدم // 9

Excellent

5, 7, 11, 17, 25, 35, 47, ?, 67

What is the hidden number?

هذه القيمة التي سيدخلها المستخدم // 22

Oh, Wrong answer. The answer is 51

A, C, E, G, ? , K, M, O, Q

What is the hidden character?

هذه القيمة التي سيدخلها المستخدم // I

Excellent

ملاحظات

عملية معالجة سلسلة الأرقام ستكون بشكل كامل عشوائية وتلقائية، بمعنى أن رقم أو حرف البداية في كل سلسلة والفرق بين الرقم

او الحرف وما يليه ستكون أرقام وحروف عشوائية، كما أن العمليات نفسها ليست ثابتة فقد تكون عمليات جمع أو طرح أو باقي

قسمة، أو ضرب أو رفع للقوة.

كل إجابة صحيحة يجب عليها المستخدم يتم زيادة درجته بمقدار 2.

2 -عرض بيانات المستخدم

عند اختيار هذا الخيار يتم عرض بيانات المستخدم التي قام بإدخالها مسبقا )مع عرض عمر المستخدم وذلك بحسابه من خلال تاريخ

ميلاده( مع الدرجة التي حصل عليها خالل عملية اللعب.

3 -خروج

عند اختيار هذا الخيار يتم اغلاق البرنامج والخروج.

شو الكود الصحيح