معرفی کلاس Scanner در زبان برنامه‌نویسی جاوا


در فرآیند توسعۀ اپلیکیشن بیشتر مواقع نیاز داریم تا بخشی از اطلاعات برنامۀ خود را از کاربر دریافت کنیم تا بر اساس اطلاعات ورودی، نتیجۀ حاصل از انجام پردازش‌های مد نظر روی داده‌های مربوطه در خروجی ریترن شود که برای این منظور طراحان زبان برنامه‌نویسی جاوا کلاسی تحت عنوان 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» را وارد کرده سپس اینتر می‌کنیم و در ادامه می‌بینیم که استرینگ ورودی از طریق صفحه‌کلید عیناً در کنسول نمایش داده می‌شود.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۸/۰۵/۰۱
بنده شخصا چیز زیادی یاد نگرفتم به همین خاطر یک بسته آموزش جاوا خریداری کردم.
mahtab.rashidi
mahtab.rashidi
۱۳۹۷/۰۳/۳۰
سلام. وقت بخیر
ممکنه بفرمایید فایل تمرین چجوری باز میشه؟
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۰۳/۱۷
سلام ، خسته نباشید
موقع ایمپورت کردن با این ارور مواجه میشم : The type com.sun.java_cup.internal.runtime.Scanner is not accessible
چه طور میشه برطرفش کرد ؟
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۰۲/۰۴
سلام.بسیار عالی .خسته نباشید.لطفن بفرمایید فایل تمرین و با چی باید باز کنیم که نمایش داده بشه؟
hadimotamedi44
hadimotamedi44
۱۳۹۶/۰۹/۱۸
با سلام و خسته نباشید خدمت دوستان سکان آکادمی
ممنون از آموزشای عالیتون
کاربر میهمان
Fffمن یک کاربر مهمان هستم
۱۳۹۵/۱۱/۰۱
Resource leak!! نشت منابع؟؟
یعنی چی؟
کاربر میهمان
Fffمن یک کاربر مهمان هستم
۱۳۹۵/۱۱/۰۱
سلام
علتش چیه که اکلیپس از ما میخواد ابجکت اسکنرو ببندیم؟
درحالی که برنامه درست اجرا میشه ؟
کاربر میهمان
موسویمن یک کاربر مهمان هستم
۱۳۹۵/۰۹/۱۶
با سلام. در یک کلام.... آموزش ها واقعا عالیه. ممنون از شما.
همچنین جا داره تشکر کنم بابت استفاده از فونت بی نظیر IranSans
سید مصطفی
سید مصطفی
۱۳۹۵/۰۹/۰۸
چرا این دستور اسکنر در سیستم من کار نمی کنه و مشکل داره ؟ و وقتی در نت پد می نویسم و می خوااهم بایت کد کنم خطا میده ؟
مثلا برنامه ی ساده زیر رو خطا میده
import java.util.Scanner;
public class mesal3{
public static void main(String[] args)
{
Scanner n = new Scanner(System.in);
System.out.println(n.nextLine());
}
}
nahid
nahid
۱۳۹۵/۰۹/۰۶
در مورد فایل تمرین تا جاییکه من میدونم همون سورس کد آموزش هر بخش هست که میتونیم بعد از اکسترکت از داخل فولدر src ، فایل progect.java را وارد اکلیپس کنیم. شاید با مقایسه این تمرین با کدی که خودمون نوشتیم بتونیم رفع اشکال کنیم.