JavaRush /مدونة جافا /Random-AR /فئة الماسح الضوئي في جافا

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

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

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

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

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
لقد أنشأنا كائن ماسح ضوئي وحددنا مصدر بيانات له (سلسلة تحتوي على نص). تصل الطريقة nextLine()إلى مصدر البيانات (نصنا مع الرباعيات)، وتجد هناك السطر التالي الذي لم تقرأه بعد (في حالتنا، الأول) وتعيده. وبعد ذلك نخرجه إلى وحدة التحكم: إخراج وحدة التحكم:

Люблю тебя, Peterа творенье,
يمكننا استخدام الطريقة nextLine()عدة مرات وإخراج القطعة الكاملة من القصيدة:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       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);
   }
}
في كل مرة يقوم الماسح الضوئي الخاص بنا باتخاذ خطوة للأمام وقراءة السطر التالي. يتم إخراج نتيجة البرنامج إلى وحدة التحكم:

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
كما قلنا من قبل، يمكن أن لا يكون مصدر بيانات الماسح الضوئي مجرد سلسلة، ولكن أيضًا، على سبيل المثال، وحدة تحكم. أخبار مهمة بالنسبة لنا: إذا كنا في السابق نخرج البيانات هناك فقط، فسنقوم الآن بإدخال البيانات من لوحة المفاتيح! دعونا نرى ماذا يمكن لفئة الماسح الضوئي أن تفعله :
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

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

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
دعنا نحاول إدخال السلسلة "JavaRush" بدلاً من الرقم: إخراج وحدة التحكم:
Enter the number:
JavaRush
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
عفوًا، كل شيء سيء -_- لتجنب مثل هذه المواقف، نحتاج إلى التوصل إلى طريقة للتحقق من صحة البيانات التي يدخلها المستخدم. على سبيل المثال، يقوم المستخدم بإدخال أي شيء آخر غير الرقم، وسيكون من الجيد عرض تحذير في وحدة التحكم بأن المعلومات المدخلة ليست رقمًا، وإذا كان كل شيء على ما يرام، قم بعرض نص التأكيد. ولكن للقيام بذلك، نحتاج في الواقع إلى "النظر إلى المستقبل" - معرفة ما هو التالي في تدفقنا. هل يستطيع الماسح الضوئي في Java القيام بذلك؟ كيف يستطيع! ولهذا فهي تحتوي على مجموعة كاملة من الأساليب: 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 the number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thank you! You entered a 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 Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
نستخدم طريقة useDelimeter() ‎ لفئة Scanner كفاصل أسطر : فهي مسؤولة عن تقسيم البيانات الواردة إلى أجزاء. في حالتنا، يتم تمرير علامة اقتباس واحدة ( "'" ) كوسيطة وتستخدم لفصل السلاسل . يظهر النص الذي يلي هذا الاقتباس على سطر جديد لأننا في حلقة while نستخدم طريقة println() لفئة النظام لقراءة البيانات. ونتيجة لذلك، سيكون لدينا مخرجات جميلة في وحدة التحكم، تمامًا كما هو الحال في الكتب:
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
في نفس المثال، هناك طريقة أخرى يجب عليك بالتأكيد الانتباه إليها - close(). مثل أي كائن يعمل مع تدفقات الإدخال/الإخراج، يجب إغلاق الماسح الضوئي عندما يكمل عمله حتى لا يستهلك موارد جهاز الكمبيوتر الخاص بنا. لا تنسى الطريقة أبدا close()!
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

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