CodeGym /مدونة جافا /Random-AR /فئة الماسح الضوئي جافا
John Squirrels
مستوى
San Francisco

فئة الماسح الضوئي جافا

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

فئة الماسح الضوئي في جافا

فئة الماسح الضوئي - 1أولا وقبل كل شيء، يجب أن نتعرف على فئة java.util.Scanner . وظيفتها بسيطة جدا. مثل الماسح الضوئي الحقيقي، فإنه يقرأ البيانات من المصدر الذي تحدده. على سبيل المثال، سلسلة، ملف، وحدة التحكم. وبعد ذلك، يتعرف على المعلومات ويعالجها بشكل مناسب. إليك أبسط مثال:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
لقد أنشأنا كائن ماسح ضوئي، وحددنا مصدر بياناته (سلسلة نصية). تصل طريقة nextLine() إلى مصدر البيانات (النص الذي يحتوي على رباعية)، وتجد السطر التالي غير المقروء (وهو السطر الأول في هذه الحالة)، وتعيده. ثم نعرضه على وحدة التحكم: إخراج وحدة التحكم:

It matters not how strait the gate,
يمكننا استخدام التابع nextLine() ‎ عدة مرات وعرض مقتطف القصيدة بالكامل:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
في كل مرة، يأخذ الماسح الضوئي خطوة واحدة إلى الأمام ويقرأ السطر التالي. يتم عرض مخرجات البرنامج:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
كما قلنا من قبل، لا يجب أن يكون مصدر بيانات الماسح الضوئي عبارة عن سلسلة. على سبيل المثال، يمكن أن يكون وحدة التحكم. بعض الأخبار المثيرة لك: في السابق، كنا نعرض البيانات هناك، لكننا الآن سنقرأ البيانات من لوحة المفاتيح! دعونا نرى ماذا تفعل فئة الماسح الضوئي أيضًا :
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
تقوم طريقة nextInt () بقراءة الرقم المُدخل وإرجاعه. في برنامجنا نستخدمه لتعيين قيمة للمتغير number . إنه بالفعل أشبه بماسح ضوئي حقيقي! يطلب البرنامج من المستخدم إدخال أي رقم. بعد قيام المستخدم بذلك، يشكر البرنامج المستخدم ويعرض النتيجة وينتهي. ولكن لا تزال لدينا مشكلة خطيرة. قد يخطئ المستخدم ويدخل شيئًا خاطئًا. فيما يلي مثال حيث يتوقف برنامجنا الحالي عن العمل:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
دعنا نحاول إدخال السلسلة "CodeGym" بدلاً من رقم: إخراج وحدة التحكم:
Enter a number:
CodeGym 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at Main.main(Main.java:10) Process finished with exit code 1
اه اه. نحن في ورطة كبيرة -_- لتجنب مثل هذه المواقف، علينا التوصل إلى طريقة للتحقق من البيانات التي يدخلها المستخدم. على سبيل المثال، إذا قام المستخدم بإدخال أي شيء آخر غير رقم، فسيكون من الجيد عرض تحذير بأن المعلومات المدخلة ليست رقمًا. وإذا كانت المعلومات على ما يرام، فيمكننا التأكيد. لكن هذا يتطلب منا "النظر إلى المستقبل" لنرى ما سيأتي في تيارنا. هل يستطيع الماسح الضوئي القيام بذلك؟ وكيف! ولديها عدد كبير من الأساليب للقيام بذلك: hasNextInt() - تتحقق هذه الطريقة مما إذا كانت المجموعة التالية من بيانات الإدخال عبارة عن رقم (ترجع صحيحًا أو خطأ، حسب الاقتضاء). hasNextLine() — تتحقق هذه الطريقة مما إذا كانت القطعة التالية من الإدخال عبارة عن سلسلة. hasNextByte() , hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() - جميع هذه الطرق تؤدي عمليات فحص مماثلة لأنواع البيانات المتبقية. دعونا نحاول تغيير برنامج قراءة الأرقام لدينا:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
الآن يتحقق برنامجنا مما إذا كان الحرف التالي الذي تم إدخاله هو رقم. ويعرض التأكيد فقط إذا كان كذلك. إذا لم ينجح الإدخال في اجتياز الفحص، يأخذ البرنامج ملاحظة ويطلب من المستخدم المحاولة مرة أخرى. في الأساس، يمكنك التواصل مع كائن الماسح الضوئي ومعرفة نوع البيانات الذي ينتظرك مسبقًا . رقم أو سلسلة أو أي شيء آخر؟ رقم؟ وأي نوع؟ int , short , long ؟" تمنحك هذه المرونة الفرصة لبناء منطق البرنامج الذي يعتمد على سلوك المستخدم. يجب أن نلاحظ طريقة أخرى مهمة: useDelimiter() . يمكنك تمرير سلسلة إلى هذه الطريقة . تحتوي السلسلة على الأحرف التي تريد استخدامها كفواصل أو محددات. على سبيل المثال، لنفترض أننا أصبحنا فجأة مهتمين بالشعر الياباني، وقررنا استخدام الماسح الضوئي الخاص بنا لقراءة بعض قصائد الهايكو التي كتبها الشاعر الكبير ماتسو باشو. حتى لو تم تمرير ثلاث أبيات مختلفة إلينا سلسلة واحدة غريبة، يمكننا بسهولة تقسيمها وعرضها بشكل جميل:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
نستخدم "\ n /*/*/*" (حرف سطر جديد وثلاث علامات نجمية) كمحدد لدينا. ونتيجة لذلك، أصبح لدينا مخرجات وحدة تحكم جميلة، تمامًا كما هو الحال في الكتب:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
يحتوي هذا المثال على طريقة أخرى يجب أن نشير إليها بالتأكيد: Close() . مثل أي كائن يعمل مع تدفقات الإدخال/الإخراج، يجب إغلاق الماسح الضوئي عند الانتهاء حتى يتوقف عن استهلاك موارد الكمبيوتر. لا تنس أبدًا طريقة الإغلاق () !
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

       sc.close(); // Now we've done everything right!

   }
}
هذا كل شيء! كما ترون، لمدى فائدتها، فإن فئة الماسح الضوئي سهلة الاستخدام للغاية! :) لتعزيز ما تعلمته، نقترح عليك مشاهدة درس فيديو من دورة Java الخاصة بنا
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION