ادوات الإدخال و الإخراج في الجافا
الكلاس Scanner, نحن تناولنا امر الطباعة, و اليوم سوف نتناول كيفية الإدخال او الطلب من المستخدم إدخال قيمة من لوحة المفاتيح keyboard.
في إستخدام عملية الإدخال سنمر بمرحلتين و هما الأولى تضمين حزمة الإدخال و الثانية إنشاء كائن حزمة الإدخال ثم نقوم بالتعامل فقط مع هذا الكائن بعد تضمين الحزمة.
هذه هي المرة الأولى الذي نقوم بها بتضمين حزمة في لغة الجافا.
الكلاس Scanner ينتمي إلى حزمة Java.util ويتم إستخدامه لقراءة إدخال البيانات من المستخدم.
لتضمين الحزم نقوم بكتابتها اسفل كلمة package و بما أننا سوف نستخدم حزمة الإدخال و دائماً. نقوم بكتابة الأمر import يعني إستيراد او تضمين ثم بعدها نقوم بإختيار الحزمة مثل util.scanner.
import java.util.Scanner
بعدها نقوم بإنشاء كائن object و هذا الكائن سوف نستخدمه في عمليات الإدخال من لوحة المفاتيح.
و في البرمجة الكائنية نحن لا نتعامل مع الكلاس و إنما نتعامل مع الكائن المشتق سنتحدث عنه لآحقاً.
سوف ننشئ كائن مشتق من الكلاس Scanner و لإنشاء كائن من اي كلاس نقوم بكتابة. إسم الكلاس و بعده نقوم بإنشاء متغير و هذا المتغير هو الكائن object الذي سنتعامل معه.
مثال 1
package gradleproject223; import java.util.Scanner; public class JavaApplication { public static void main(String[] args) { Scanner s=new Scanner(System.in); int n=s.nextInt(); System.out.println("the enter is" + " " + n); } }
في البداية كتبنا الحزمة و إسمها ثم قمنا بتضمين الحزمة اسفل كلمة package و بما أننا نتعامل مع حزمة الإدخال قمنا بتضمينها عبر import.
و ضمننا الحزمة util.Scanner التي ستمكننا من التعامل مع العديد من الأوامر و من بينها اوامر الإدخال.
سيقوم البرنامج بوضع خط اصفر اسفل تضمين الحزمة بمثابة تحذير لأننا كتبناها و لم نستخدمها بعد و بمجرد إستخدامها سيختفي هذا التحذير.
ثم قمنا بإنشاء كائن من خلال هذا الكائن نقوم بإستخدام عمليات الإدخال من لوحة المفاتيح.
في البرمجة الكائنية نحن لا نتعامل مع الكلاس Scanner, إنما نتعامل مع الكائن المشتق سنتحدث عنه لآحقاً.
لإنشاء كائن من أي كلاس نقوم بكتابة اسم الكلاس ثم كتابة متغير بعد الكلاس. و هو الكائن الذي سنتعامل معه Scanner s=new Scanner و new هو الكائن الذي اشتقيناه.
يعني أخذنا نسخة من خلال new اخذنا نسخة من الكلاس Scanner, و كتبنا حزمة اخرى System.in و هي بدورها ستهيئ لنا عملية الإدخال.
بعده وضعنا متغير عددي int لتخزين قيم عددية بداخله و s هذا هو الكائن الذي قمنا بإشتقاقه. من الكلاس Scanner ثم وضعنا الأمر nextInt لتحديد نوع الإدخال أي إدخال عددي.
قلنا له عليك بإستقبال أي مدخل من لوحه المفاتيح بشرط يكون عددي ثم يتم تخزينه في متغير n.
إذا أردنا طباعة محتوى المتغير n قمنا بكتابة امر الطباعة System.out.println و قلنا له إطبع قيمة n الذي ادخلناها من لوحه المفاتيح.
و عند تنفيذ البرنامج السابق عندما نكتب اي رقم مثلاً 8 من لوحه المفاتيح يكتبه لنا بالشكل the enter is 8.
مثلاً إذا أردنا إستقبال متغير نصي نستخدم String n =s.nextLine لكي يتم استقبال فقط متغيرات نصية.
مثال 2
اكتب برنامج يطلب من المستخدم إدخال الإسم والعمر و رمز id ثم يقوم بطباعة الناتج على الشاشة.
package gradleproject223; import java.util.Scanner; public class JavaApplication { public static void main(String[] args) { String Name = ""; int age = 0; byte id = 0; Scanner s=new Scanner(System.in); Name=n.nextLine(); Scanner n1=new Scanner(System.in); age = n1.nextInt(); Scanner n2=new Scanner(System.in); id = n2.nextByte(); System.out.println("Name = " + Name); System.out.println("age = " + age); System.out.println("id = " + id); } }
قمنا بإنشاء متغير نصي للأسم وهو Name ومتغير آخر للعمر وهو age ومتغير للأيدي وهو byte.
جميع هذه المتغيرات قيمهم صفرية من أجل إستقبال هذه القيمة من المستخدم نفسه.
لأجل الإسم اشتقينا كلاس Scanner من الكائن s ثم قلنا أن Name تستقبل القيمة نصية من المستخدم بإستخدام nextLine.
لأجل العمر اشتقينا كلاس Scanner من الكائن n1 ثم قلنا أن age تستقبل قيمة عددية من المستخدم بإستخدام nextInt.
لأجل الأيدي اشتقينا كلاس Scanner من الكائن n2 ثم قلنا أن byte تستقبل قيمة عددية byte من المستخدم بإستخدام nextByte.
بعد ذلك اتينا لعملية الطباعة وطبعنا الثلاث قيم بواسطة System.out.println بعد إستقبالهم من المستخدم.
الدوال المستخدمة مع الكلاس Scanner في جافا
توفر فئة Java Scanner الطرق التالية لقراءة أنواع العناصر الأولية المختلفة:
- الدالة nextInt() يستخدم من أجل إستقبال عدد صحيح int فقط.
- الدالة nextFloat() يستخدم من أجل إستقبال عدد عشري float فقط.
- الدالة nextDouble() يستخدم من أجل إستقبال عدد عشري طويل Double فقط.
- الدالة nextByte() يستخدم من اجل ادخال بايت byte أي 1 بايت من الذاكرة.
- الدالة nextLine() ترجع السطر التالي الذي تم إدخاله في كائن الـ Scanner.
- الدالة nextBoolean() يستخدم من اجل استقبال قيمة منطقية boolean.
- الدالة nextLong() ترجع القيمة التي تم إدخالها في الكائن Scanner في حال كانت هذه القيمة تعتبرنوع long.
- الدالة nextShort() تستخدم لإستقبال قيمة نوعها short من المستخدم.
مثال 3
import java.util.*; class UserInputDemo { public static void main(String[] args) { Scanner sc= new Scanner(System.in); System.out.print("Enter first number- "); int a= sc.nextInt(); System.out.print("Enter second number- "); int b= sc.nextInt(); System.out.print("Enter third number- "); int c= sc.nextInt(); int d=a+b+c; System.out.println("Total= " +d); } }