در فرآیند توسعۀ اپلیکیشن بیشتر مواقع نیاز داریم تا بخشی از اطلاعات برنامۀ خود را از کاربر دریافت کنیم تا بر اساس اطلاعات ورودی، نتیجۀ حاصل از انجام پردازشهای مد نظر روی دادههای مربوطه در خروجی ریترن شود که برای این منظور طراحان زبان برنامهنویسی جاوا کلاسی تحت عنوان Scanner
طراحی کردهاند که چنین قابلیتی را برای دولوپرها فراهم میکند.
در حقیقت، کلاس Scanner
یک کلاس از پیش تعریفشده در زبان برنامهنویسی جاوا است که به منظور استفاده از ویژگیهای آن میتوانیم کلاس مذکور را در برنامۀ خود اصطلاحاً Import یا «وارد» کرده و آبجکتی از روی آن بسازیم که جهت آشنایی با قابلیتهای این کلاس، پروژۀ جدیدی تحت عنوان ScannerIntro ایجاد کرده سپس کلاسی به نام Project
در آن میسازیم که در ابتدا برنامۀ مورد نظر به صورت زیر میباشد:
public class Project {
public static void main(String[] args) {
}
}
در ادامه، قصد داریم تا امکانی را برای برنامۀ فوق فراهم کنیم تا قابلیت دریافت ورودی را از سمت کاربر داشته باشد و همانطور كه پیشتر اشاره کردیم، برای استفاده از متدها و سایر ویژگیهای کلاس از پیش تعریفشدۀ Scanner
آبجکتی از روی آن میسازیم:
public class Project{
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
}
}
همانطور که میبینید، با بهکارگیری کیورد new
آبجکتی جدید از روی کلاس مذکور ساخته سپس آن را به متغیری تحت عنوان myScanner
منتسب مینماییم. در ادامه، دستور System.in
را به منظور دریافت ورودی از طریق کنسول به آبجکت myScanner
پاس میدهیم تا بدین طریق ورودیهای دریافتی از طریق صفحهکلید را به راحتی بتوانیم در متدهای تعریفشده داخل کلاس اسکنر مورد استفاده قرار دهیم که در اینجا کیورد System
به کلاسی از پیش تعریفشده در زبان جاوا اشاره دارد که امکان دسترسی برنامه به بخشهایی از سیستم را فراهم مینماید که خارج از کنترل مستقیم ماشین مجازی جاوا هستند و کیورد in
نیز به منظور دسترسی به بخش ورودی آیدیای مد نظر اشاره دارد که بدین ترتیب در این مثال با اجرای دستور System.in
برنامۀ فوق امکان دسترسی به ورودی سیستم را یافته و از این طریق میتوان دیتای مورد نظر را وارد کرده و در ادامه پردازشهای مورد نیاز را روی آن انجام داد.
به خاطر داشته باشید |
همانطور که در آموزشهای گذشته توضیح داده شد، برنامۀ مورد نظر همواره باید یک نقطۀ شروع داشته باشد و از همین روی در حین ایجاد کلاس میباید گزینۀ public static void main را تیک بزنیم. |
اکنون میبینیم که محیط برنامهنویسی اکلیپس با قرار دادن خطچین دور واژههای Scanner
و همچنین قرار دادن یک علامت ستاره کنار نام فایل مربوط به پروژه اخطاری مبنی بر وجود مشکل در برنامه میدهد که به منظور یافتن راهحل ماوس خود را روی علامت خطچین نگاه میداریم که در ادامه باکسی در قالب یکسری پیشنهاد جهت رفع خطای موجود مشاهده خواهیم کرد. از سوی دیگر، نکتۀ قابلتوجه در ارتباط با استفاده از ویژگیهای یک کلاس و همچنین ساخت آبجکت از روی کلاس مربوطه این است که در ابتدا میباید کلاس مد نظر را در برنامۀ خود ایمپورت کنیم که از همین روی اولین گزینۀ پیشنهادی در قالب عبارت Import Scanner را انتخاب میکنیم و در ادامه میبینیم که دستور مربوطه به ابتدای سورسکد افزوده شده و کدی به صورت زیر خواهیم داشت:
import java.util.Scanner;
public class Project {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
}
}
همچنین به جای ایمپورت کردن کلاس فوق توسط آیدیای اکلیپس، میتوانیم دستورات مربوط به ایمپورت را در کد فوق به صورت دستی وارد نماییم. به علاوه، پس از ساخت آبجکت از روی کلاس از پیش تعریفشدۀ مورد نظر میتوانیم با فشردن همزمان کلیدهای Crtrl + Shift + O، کلاس مربوطه را در سورسکد خود ایمپورت نماییم.
همانطور که در کد فوق مشاهده میشود، دستور ;import java.util.Scanner
به ابتدای سورسکد پروژه اضافه شده است که از این پس بدون هیچ مشکلی میتوانیم از کلاس Scanner
استفاده کنیم. در ادامه، به منظور تست عملکرد برنامۀ خود قصد داریم تا دیتای دریافتشده از سمت کاربر را عیناً در خروجی چاپ کنیم که برای این منظور کد فوق را به صورت زیر تکمیل مینماییم:
import java.util.Scanner;
public class Project {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
String userInput = myScanner.nextLine();
System.out.println(userInput);
myScanner.close();
}
}
در کد فوق، متد ()nextLine
متعلق به کلاس Scanner
بوده و از همین روی آن را روی آبجکت ساختهشده از کلاس مذکور فراخوانی نمودهایم که این وظیفه را دارا است تا دیتای ورودی از سمت کاربر را نگهداری و در خروجی ریترن کند که در سطر پنجم دیتای ریترنشده به آبجکتی از کلاس String
تحت عنوان userInput
منتسب کردهایم و بدین ترتیب پردازشهای مورد نیاز را میتوان روی دیتای مد نظر انجام داد (توجه داشته باشیم که برای تعریف آبجکتی از کلاس String
از کیورد new
استفاده نکردهایم چرا که در این مثال آبجکتی جدید از روی کلاس مذکور ایجاد نمیکنیم بلکه صرفاً یک اشارهگر به استرینگ مورد نظر تعریف مینماییم بدین معنی که در هر بار اجرای برنامه آبجکتی جدید از روی کلاس String
ساخته نمیشود بلکه آبجکت ساختهشده همواره به مقدار ثابتی همچون استرینگ مربوطه در این مثال ارجاع میدهد.)
در این مرحله از برنامه میباید متد از پیش تعریفشدۀ ()close
را روی آبجکت ساختهشده فراخوانی کنیم. در واقع، متد ()close
به منظور غیرفعال کردن امکان دریافت ورودی از سمت کاربر مورد استفاده قرار میگیرد بدین معنی که در انتهای اجرای سایر دستورات برنامه فراخوانی شده و قابلیت دریافت ورودی و همچنین تغییر مجدد در دیتای ذخیرهشده را غیرفعال میسازد.
اکنون در ادامه قصد داریم تا دیتای مورد نظر را از طریق متد ()println
در کنسول چاپ کنیم که از همین روی دیتای اختصاصيافته به آبجكت userInput
را به عنوان آرگومان ورودی به متد ()println
میدهیم تا آن را در کنسول نمایش دهد. حال برنامۀ فوق را اجرا میکنیم به طوری که در خروجی خواهیم داشت:
My name is Behzad Moradi
My name is Behzad Moradi
با اجرای کد فوق میتوانیم دیتایی را در بخش كنسول آیدیای مد نظر و در قالب یک مقدار استرینگ وارد نماییم که در این مثال جملهای دلخواه مانند «My name is Behzad Moradi» را وارد کرده سپس اینتر میکنیم و در ادامه میبینیم که استرینگ ورودی از طریق صفحهکلید عیناً در کنسول نمایش داده میشود.