اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم ورحمة الله وبركاته...

 

مين يعرف كيف أكتب كود طبيعي في برنامج NetBeans بدون استخدام مكتبة ( java.util.Locale ) ؟ لأنه لو كتبت الكود بدون المكتبة ما أقدر أكتب رقم عشري بس أقدر أكتب رقم صحيح

( شوفوا الصور تحت وبتفهموا أكثر ) 

| بدون المكتبة |

2024-02-22011735.thumb.png.af9298bd6710ecf7aaa3616182d25e31.png

| مع المكتبة |

2024-02-22010251.thumb.png.fd679c4f82758feb40becfb94acc4fdf.png

تم التعديل في بواسطة WPA

Recommended Posts

  • 0
نشر (معدل)

الكود عندي يعمل سواء باستيراد المكتبة أو من دونها، فالمكتبة `java.util.Locale` فهذه المكتبة تستخدم بشكل رئيسي لإعدادات اللغة والمنطقة وتنسيق النصوص.

فعند كتابة الرقم العشري في Java باستخدام `Scanner`، يمكننا استخدام `()nextDouble` لقراءة الأرقام العشرية من المدخل القياسي، وهذا لا يتأثر بأي استيراد لمكتبة `Locale`.

وهذا ما نراه واضحا من خلال تشغيلي لكلا البرنامجين، إذ يظهر أنه يعمل بهذا الكود:

import java.util.Scanner;

public class Firstproject1 {

    public static void main(String[] args) {
        Scanner in = new Scanner (System.in);
        System.out.println("Enter Your Height: ");
        double Height = in.nextDouble();
        
        System.out.println("Your height is: " +Height);
    }
}

أما بالنسبة لرسالة الخطأ التي ظهرت لك من نوع "java.util.InputMismatchException" فهي تحدث عندما يحاول المستخدم إدخال نوع بيانات لا يتوافق مع النوع المتوقع من قبل البرنامج.

في هذه الحالة، الخطأ يحدث عندما تحاول قراءة الرقم العشري باستخدام `()nextDouble` ولكن الإدخال الذي تم إرفاقه قد لا يكون رقمًا عشريًا صالحًا، وربما يكون ذلك بسبب إدخال نصي بدلاً من رقم.لحل هذه المشكلة، يمكن التحقق من نوع الإدخال المدخل قبل قراءته. يمكن استخدام دالة `()hasNextDouble` للتحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري أم لا. بهذا الشكل:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter Your Height: ");
        
        // التحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري
        while (!in.hasNextDouble()) {
            System.out.println("Invalid input. Please enter a valid number.");
            in.next(); // تجاهل الإدخال غير الصالح وقراءة الإدخال التالي
        }
        
        double height = in.nextDouble();

        System.out.println("Your height is: " + height);
    }
}

فهنا إذا كان الإدخال غير صالح (أي غير رقمي)، سيتم عرض رسالة خطأ وطلب إدخال صالح.

أما بالنسبة لمثالك فالواضح أنك قمت بإدخال الرقم 5.5 وليس نصا أو رقما خاطئا، والسبب في ظهور المشكلة يكمن في أن السبب في ذلك هو استخدام الفارق في تنسيق الأرقام العشرية. ففي بعض البلدان، يتم استخدام الفارق أي النقطة "." كمحدد للأرقام العشرية، بينما في بلدان أخرى تستخدم "," كمحدد للأرقام العشرية.لحل هذه المشكلة، يمكننا تعيين المحدد الصحيح للأرقام العشرية باستخدام `Locale` بشكل صريح. على سبيل المثال، يمكنك تعيين `Locale.US` الذي يستخدم "." كمحدد للأرقام العشرية بدلاً من ",".  بهذا الشكل:

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

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        in.useLocale(Locale.US); // تعيين المحدد الصحيح للأرقام العشرية
        
        System.out.println("Enter Your Height: ");
        
        // التحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري
        while (!in.hasNextDouble()) {
            System.out.println("Invalid input. Please enter a valid number.");
            in.next(); // تجاهل الإدخال غير الصالح وقراءة الإدخال التالي
        }
        
        double height = in.nextDouble();

        System.out.println("Your height is: " + height);
    }
}

فبتعيين `Locale.US`، يجب أن يتم قبول 5.5 كرقم عشري صالح دون وجود أخطاء.

تم التعديل في بواسطة ياسر مسكين
  • 0
نشر

طيب هل أقدر أعدّل في إعدادات الجهاز بحيث أستغني عن مكتبة `Locale.US` ؟ لأني جرّبت الكود في برنامج ثاني بدون المكتبة واشتغل معي، بس المشكلة في NetBeans، ومثل ما قلت أنت بسبب إعدادات الفارق في تنسيق الأرقام العشرية

  • 0
نشر
بتاريخ 1 دقيقة مضت قال WPA:

طيب هل أقدر أعدّل في إعدادات الجهاز بحيث أستغني عن مكتبة `Locale.US` ؟ لأني جرّبت الكود في برنامج ثاني بدون المكتبة واشتغل معي، بس المشكلة في NetBeans، ومثل ما قلت أنت بسبب إعدادات الفارق في تنسيق الأرقام العشرية

نعم، يمكنك ضبط إعدادات اللغة والموقع (Locale settings) في جهازك لتكون متوافقة مع القيم التي تتوقعها من برنامجك دون الحاجة لاستخدام `Locale.US` في الكود.

في نظام التشغيل Windows مثلا يمكنك فعل ذلك عن طريق اتباع الخطوات التالية:

فتح "Control Panel" (لوحة التحكم) من قائمة "Start" (ابدأ).
اختيار "Clock and Region" (الساعة والمنطقة).
النقر على "Region" (المنطقة).
الانتقال إلى علامة التبويب "Formats" (تنسيقات).
اختيار اللغة والتنسيق المطلوب من قائمة "Format" (التنسيق).

أخبرني في حال واجهتك أي مشكلة أخرى.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...