البرمجة

فحص نوع المدخلات في Java: تحويل النصوص إلى أنواع بسيطة وتفادي مشاكل التحقق

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

السبب في هذا السلوك هو أنك تستخدم readLine() لقراءة الإدخال، وهذا يعيد دائمًا البيانات كنص (String). حتى لو قام المستخدم بإدخال قيمة رقمية، سيتم قراءتها كسلسلة نصية. لذا، جميع الفحوصات تظهر أن النوع هو String، مما يؤدي إلى النتيجة الحالية.

لتصحيح هذا، يجب عليك تحويل الإدخال المقروء إلى أنواع مناسبة قبل إجراء الفحص. يمكنك استخدام تحويلات مثل Integer.parseInt() أو Double.parseDouble() لتحويل النصوص إلى أنواع رقمية. فيما يلي تعديل للكود:

java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Demo { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 9; ++i) { String input = br.readLine(); showPrimitive(input); } } public static void showPrimitive(Object input) { try { if (input instanceof Short || Short.parseShort(input.toString()) instanceof Short) System.out.println("Primitive : short"); else if (input instanceof Integer || Integer.parseInt(input.toString()) instanceof Integer) System.out.println("Primitive : int"); else if (input instanceof Long || Long.parseLong(input.toString()) instanceof Long) System.out.println("Primitive : long"); else if (input instanceof Float || Float.parseFloat(input.toString()) instanceof Float) System.out.println("Primitive : float"); else if (input instanceof Double || Double.parseDouble(input.toString()) instanceof Double) System.out.println("Primitive : double"); else if (input instanceof Boolean || Boolean.parseBoolean(input.toString()) instanceof Boolean) System.out.println("Primitive : boolean"); else if (input instanceof Character || input.toString().length() == 1) System.out.println("Primitive : char"); else if (input instanceof Byte || Byte.parseByte(input.toString()) instanceof Byte) System.out.println("Primitive : byte"); else System.out.println("Reference : string"); } catch (NumberFormatException e) { System.out.println("Reference : string"); } } }

تم تضمين استخدام الدوال مثل Integer.parseInt() لتحويل النصوص إلى أنواع مناسبة، وتم إضافة التفاف بين parseXxx واستخدام instanceof لضمان عدم رمي استثناء في حالة عدم القدرة على تحويل القيمة.

المزيد من المعلومات

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


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

واجهتك مشكلة تتعلق بتحقق نوع الإدخال. بما أنك تستخدم BufferedReader وتقوم بقراءة الإدخال باستخدام readLine()، يتم دائمًا إعادة البيانات كنص (String). وبالتالي، فإن جميع الفحوصات تؤدي إلى نفس النتيجة، حيث تكون الإدخالات دائمًا من نوع String.

لحل هذه المشكلة، قمت بتعديل الشيفرة لتضمن تحويل النصوص إلى أنواع مناسبة باستخدام دوال مثل Integer.parseInt() لتحويل النصوص إلى أنواع رقمية. يتم ذلك لكل نوع ممكن، مع التفاف إضافي للتحقق من إمكانية التحويل دون رمي استثناء.

تجدر الإشارة إلى أن هناك دوال أخرى يمكن استخدامها لتحقيق نفس الهدف، مثل Double.valueOf() أو Boolean.valueOf()، ولكن يجب أن يتم اختيار الدالة المناسبة وفقًا للحالة المحددة.

في النهاية، يُظهر هذا النموذج كيف يمكن للمبرمجين التحقق من نوع المتغيرات واتخاذ الإجراءات المناسبة وفقًا لذلك في لغة Java.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر