آموزش برنامه نویسی جاوا: مفاهیم پایه در زبان جاوا (قسمت ۷)

چهارشنبه ۱۲ اسفند ۱۳۹۴ - ۱۴:۳۰
مطالعه 19 دقیقه
در جلسه‌ی قبل ما با نحوه‌ی ورودی گرفتن از طریق کنسول آشنا شدیم. در این جلسه با انواع دیگری از روش‌های ورودی گرفتن در جاوا آشنا می‌شویم (ورودی از طریق اسکنر و واسط کاربری). همچنین با کلاس Math و متد‌های آن آشنا می‌شویم و به متد‌ها نگاهی عمیق‌تر می‌کنیم. در ادامه یاد می‌گیریم چگونه مقادیری را برای پارامتر‌های متد main در نظر بگیریم و از آن‌ها استفاده کنیم. این پارامتر‌ها را هم از طریق Command Prompt به برنامه ارسال می‌کنیم و هم از طریق محیط توسعه‌ی اکلیپس.
تبلیغات

پیش گفتار

تا قبل از این آموزش، ما 13 آموزش برنامه نویسی جاوا را منتشر کرده‌ایم. تمام سعی ما بر این است که این دوره‌ی آموزشی را به بهترین نحو پیش ببریم و مطالب را طوری آموزش دهیم تا کسانی که برنامه نویسی را با این دوره شروع کرده‌اند به راحتی مفاهیم را درک کنند. برای همین منظور حجم آموزش‌ها خیلی زیاد نیست. اما با توجه به نظرات کاربران در مورد کم بودن آموزش‌ها و مسلما طولانی شدن آموزش‌ها، تصمیم گرفتیم که از این آموزش به بعد حجم مطالب را افزایش دهیم. البته این افزایش مطلب باعث کلی گویی در آموزش‌ها نمی‌شود.

کلاس Scanner

یکی دیگر از روش‌های دریافت ورودی از کاربر استفاده از کلاس Scanner است. این کلاس در پکیج java.util قرار دارد و برای استفاده از این کلاس حتما باید پکیج مربوطه را import کنیم. برای استفاده از کلاس اسکنر ابتدا باید با استفاده از کلمه‌ی کلیدی new یک آبجکت یا شی بسازیم. با توجه به اینکه در حال حاضر ما به مبحث شی‌گرایی نرسیده‌ایم بهتر است فقط نحوه‌ی استفاده از این کلاس را حفظ کنید تا بعدا در مبحث مربوطه با جزئیات کار آشنا شوید. به کد زیر دقت کنید:

Scanner input = new Scanner(System.in);

همانطور که مشاهده می‌کنید ما ابتدا نام کلاس Scanner را نوشته‌ایم و بعد متغیری با نام input تعریف کرده‌ایم و بعد با استفاده از کلمه‌ی کلیدی new شی‌ را ساخته‌ایم. متغیر input در اصل ارجاعی به شی Scanner است نه اینکه خود input شی باشد. اما تمام برنامه نویسان برای راحتی کار به متغیر input آبجکت یا شی می‌گویند. به عملی که ما در بالا انجام داده‌ایم ساختن یک آبجکت یا شی از روی کلاس Scanner گفته می‌شود. در مبحث شی‌گرایی مفهومی است با نام Constructor یا سازنده که به متد هم نام آن کلاس گفته می‌شود. (این مفاهیم در مبحث شی گرایی به طور مفصل توضیح داده خواهد شد. پس نگران نباشید!!!). اگر در کد بالا دقت کنید ما در داخل پرانتز‌های باز و بسته‌، استریم (جریان) System.in را نوشته‌ایم. همانطور که در آموزش قبلی مشاهده کردید ما با استفاده از System.in از طریق کنسول برنامه ورودی‌ را دریافت کردیم. در اینجا System.in در کانستراکتور کلاس Scanner معرف جریان داده‌ای است که از طریق کنسول برنامه از کاربر دریافت می‌شود. این جریان داده در اختیار آبجکت اسکنر قرار داده می‌شود تا این آبجکت نیز داده‌ها را در قالب یک متن قابل تفسیر در اختیار ما قرار دهد. در ادامه ما با استفاده از متد‌هایی که در کلاس Scanner تعریف شده اند می‌توانیم از کاربر ورودی دریافت کنیم. بعضی از این متد‌ها در زیر آورده شده اند:

nextLine() - next() - nextInt() - nextDouble()

حالا می‌خواهیم برنامه‌ای بنویسیم که کاربر یک متنی را بنویسد و تا زمانی که دکمه‌ی Space را نزده است، متن نوشته شده توسط کاربر وارد برنامه شود. یعنی زمانی که Space زده شد، از Space به بعد را برنامه نادیده بگیرد (وارد برنامه نشود). به کد زیر توجه کنید:

Scanner

سلسله مطالب آمورش جاوا

در مورد کدی که در خط هفت نوشته شده است توضیح داده شد. مهم ترین خط، خط 10 است که ابتدا یک متغیر با نام name از نوع String تعریف کرده‌ایم و بعد علامت مساوی را قرار داده‌ایم. در سمت راست مساوی ما عملیات ورودی را انجام داده‌ایم. ما با استفاده از متد next می‌توانیم به متنی که توسط کاربر تایپ شده است دست یابیم. چون متد next در کلاس اسکنر است، بنابراین برای دسترسی به آن متد باید از آبجکتی که از روی آن کلاس ایجاد شده است استفاده کنیم. ما آبجکت input را از روی کلاس Scanner ایجاد کرده‌ایم. بنابراین ابتدا این آبجکت را می‌نویسیم و سپس یک نقطه (.) قرار می‌دهیم و بعد نام متد را می‌آوریم. وقتی اجرای برنامه به این خط از برنامه می‌رسد (خط 10)، برنامه منتظر می‌ماند تا کاربر چیزی را در کنسول برنامه تایپ کند و سپس دکمه‌ی اینتر را بزند. بعد از اینکه کاربر دکمه‌ی اینتر را فشار داد، چیز‌هایی که کاربر تایپ کرده است در متغیر name ذخیره می‌شود. در خط آخر برنامه هم (خط 13) استفاده از آبجکت اسکنر مسدود شده است. مسدود کردن آبجکت Scanner باعث آزاد شدن کنسول برنامه می‌شود تا قسمت‌های دیگر برنامه در صورت نیاز بتوانند از آن استفاده کنند.

نکته‌ی دیگری که در این برنامه باید به آن توجه کنیم این است که در خط اول برنامه پکیجی را import کرده‌ایم. همانطور که قبلا هم گفته شد برای استفاده از کلاس‌هایی که در پکیج‌های دیگر قرار دارند، باید آن‌ها را import کنیم. البته ما می‌توانستیم استفاده از کلاس اسکنر را به صورت زیر هم بنویسیم تا دیگر پکیج مربوطه را import نکنیم:

java.util.Scanner input = new java.util.Scanner(System.in);

اگر پکیج‌ها را import نکنیم و به شکل بالا از کلاس‌ها استفاده کنیم، نکته‌ای است که همانطور که مشاهده می‌کنید ما در هر جایی که بخواهیم از کلاس Scanner استفاده کنیم، باید نام کلاس به همراه نام دقیق پکیج آن نوشته شود. اما اگر import کنیم دیگر نیازی به این کار نیست. بنابراین import کردن بهترین کار است. نکته‌ی مهم دیگری که در این کار وجود دارد این است که import کردن فقط در فایل java. است و وقتی که برنامه‌ی ما توسط ابزار javac کامپایل می‌شود و فایل class. ایجاد می‌شود، دیگر در فایل class. خبری از import نیست. زیرا کامپایلر جاوا زمانی که می‌خواد برنامه را کامپایل کند و به کلاس اسکنر می‌رسد، به import ها نگاه می‌کند و کلاس مورد نظر را پیدا می‌کند و آن را دقیقا مشابه آن چیزی که ما در بالا نوشته‌ایم می‌نویسد.

خروجی برنامه‌فوق به صورت زیر است:

What is your name? Sina Doshiri

Your name is: Sina

همانطور که مشاهده می‌کنید من به عنوان ورودی نام کامل خودم را وارد کرده‌ام. اما خروجی فقط نام من را چاپ کرده است. علت این است که من از متد next استفاده کرده‌ام. بنابراین این متد از بعد از Space را در نظر نمی‌گیرد. در مورد متد‌های دیگر خودتان تحقیق کنید. همانطور که از نامشان پیداست برای دریافت عددصحیح و عدد اعشاری استفاده می‌شوند. متد nextLine هم مانند next است اما تمام Space ها را نیز در نظر می‌گیرد.

دریافت ورودی از طریق واسط کاربری

یکی دیگر از روش‌های دریافت ورودی در جاوا که روش جذابی هم است، استفاده از واسط کاربری است. منظور از واسط کاربری همان پنجره‌هایی است که مبنای کار سیستم عامل‌های امروزی است. از طریق این پنجره‌ها، ممکن است داده‌هایی را به یک برنامه وارد کنید یا خروجی اجرای یک برنامه را مشاهده کنید. کلاس JOptionPane یکی دیگر از کلاس‌های جاوا است که با استفاده از متد‌های آن می‌توان انواع مختلفی از پنجره‌های از پیش تعریف شده را نمایش داد. قبل از این آموزش ما با استفاده از کادر‌های گفتگو متنی را نمایش دادیم. اما در اینجا می‌خواهیم یک ورودی را از کاربر دیافت کنیم. برای این کار باید از متد showInputDialog استفاده کنیم. به کد زیر توجه کنید:

همانطور که در تصویر بالا مشاهده می‌کنید، هم کد و هم خروجی برنامه آورده شده است. کلاس JOptionPane در پکیج javax.swing قرار دارد و طبق معمول باید آن را import کرد.

حالا می‌خواهیم برنامه‌ای بنویسیم که ابتدا دو عدد را از طریق دیالوگ‌ها وارد برنامه کنیم، آن‌ها را جمع کنیم و سپس خروجی را هم با استفاده از کادرهای گفتگو نشان دهیم. به برنامه‌ی زیر با دقت نگاه کنید:

برنامه‌ی بالا را می‌توان یک ماشین حساب ساده در نظر گرفت. نکته‌ای که در مورد کادر‌های گفتگو وجود دارد این است که ورودی‌ که برنامه از این طریق دریافت می‌کند همگی از نوع String هستند. بنابراین برای اینکه ما بخواهیم مقداری که کاربر از طریق کادر‌های گفتگو وارد برنامه می‌کند را در یک متغیر ذخیره کنیم تا در ادامه‌ی برنامه از آن استفاده کنیم، آن متغیر باید از جنس String باشد. همانطور که در خطوط هف و هشت مشاهده می‌کنید ما دو متغیر از نوع String با نام‌های firstNum و secondNum تعریف کرده‌ایم تا به ترتیب عدد اول و عدد دوم را ذخیره کند. توجه داشته باشید که ما می‌خواهیم عملیات جمع انجام دهیم. بنابراین مثلا عدد 2 که به صورت String در حافظه ذخیره شده با 2 که به صورت int یا double ذخیره شده است تفاوت دارد. اجازه دهید کار خود را با یک مثال پیش ببریم. به کد زیر توجه کنید:

string-and-int

در برنامه‌ی بالا ابتدا دو متغیر از نوع String تعریف شده‌اند که هر کدام مقدار 2 را دریافت کرده اند. در خط هفت وقتی آن دو متغیر را با هم جمع می‌کنیم، براساس منطق ریاضی جواب باید 4 شود. اما جواب 22 است. در حقیقت 22 هم نیست!!!. فقط برنامه دو تا دو را در کنار هم نوشته است. اما در قسمت بعد برنامه ما دو متغیر از نوع int تعریف کرده‌ایم و در خط 11 آن‌ها را با هم جمع و در خروجی چاپ کرده‌ایم. اینبار جواب درست را می‌بینیم. یعنی 4.

در برنامه‌ای که دو عدد را از کاربر دریافت و سپس جمع می‌کند، برنامه ابتدا ورودی کاربر را در متغیر‌هایی از نوع String ذخیره کرده است. بنابراین اگر ما آن دو متغیر را با هم جمع کنیم، برنامه جواب درست را به ما نمی‌دهد. پس باید چه کاری انجام دهیم!؟ در خطوط 10 و 11 برنامه این مسئله روشن شده است. ما مقادیر String را به double تبدیل کرده‌ایم. در جلسه‌ی قبل در مورد cast کردن صحبت کردیم که می‌توانستیم داده‌ای از نوع دیگر را به داده‌ای از نوع دیگر تبدیل کنیم. اما در اینجا ما کست نکرده‌ایم. در حقیقت با استفاده از متد parseDouble، عمل پارس کردن را انجام داده‌ایم. علت هم این است که کست کردن فقط برای داده‌های پایه در جاوا است.

در جاوا ما به اندازه‌ی داده‌های پایه (Primitive Data Types)، کلاس‌های تقریبا با همین نام‌ها که با حروف بزرگ شروع می‌شوند داریم که به آن‌ها Wrapper class گفته می‌شود. ما در اینجا قصد صحبت کردن در مورد Wrapper class ها را نداریم. اما برای استفاده از متد parseDouble باید از Wrapper class ها استفاده می‌کردیم. نهایتا با کاری که ما در خطوط 10 و 11 انجام داده‌ایم، مقادیر String را به double تبدیل کرده‌ایم تا بتوانیم عملیات ریاضی بر روی آن‌ها انجام دهیم. خطوط بعدی برنامه هم کاملا واضح است. ما داده‌های تبدیل شده به double را با هم جمع کردیم و در یک متغیر دیگری از با نام result از نوع double ذخیره کرده‌ایم. در خط آخر هم جواب نهایی را با استفاده از کادر‌های گفتگو نمایش داده‌ایم.

یک نکته‌ی دیگری که باید به آن توجه کنید این است که در برنامه‌های جاوا به صورت معمول وقتی اجرای برنامه به آخر متد ()main می‌رسد، اجرای برنامه به صورت اتوماتیک خاتمه می‌یابد. اما در صورتی که برنامه از قسمت‌های نمایشی (مانند همین برنامه که از کادر‌های گفتگو استفاده کرده‌ است) تشکیل شده باشد، برای اتمام برنامه در آخرین خط، کد زیر را بنویسید:

System.exit(0);

استفاده از متد‌های کلاس Math

در جاوا کلاسی با نام Math وجود دارد که حاوی متد‌هایی برای انجام اعمال محسباتی و مثلثاتی است. بعضی از متد‌هایی که در این کلاس وجود دارند در زیر آمده است:

Math.sqrt() - Math.round() - Math.abs() - Math.ceil() - Math.floor() - Math.sin() - Math.cos()

متد‌های بسیار زیادی در این کلاس وجود دارد که در بالا فقط هفت متد آن آورده شده است.

  • Math.sqrt ریشه‌ی دوم یک عدد را حساب می‌کند (جذر می‌گیرد).
  • Math.round یک عدد را رُند می‌کند.
  • Math.abs قدر مطلق یک عدد را حساب می‌کند.
  • Math.ceil یک عدد را به سمت بالا رُند می‌کند.
  • Math.floor یک عدد را به سمت پایین رُند می‌کند.
  • Math.sin سینوس یک عدد را حساب می‌کند.
  • Math.cos کسینوس یک عدد را حساب می‌کند.

تمام هفت متد معرفی شده در برنامه‌ی زیر به کار رفته است:

Math

برنامه را اجرا کنید و خروجی آن را مشاهده کنید. (پاسخ سینوس و کسینوس را درست نمایش نمی‌دهد. در مورد آن سرچ کنید).

همانطور که مشاهده کردید ما برای استفاده از هریک از متد‌های کلاس Math، ابتدای نام متد، نام کلاس را آورده‌ایم و سپس یک نقطه قرار داده‌ایم و بعد، از متد مورد نظر استفاده کرده‌ایم. علت این کار این است که متد‌های کلاس Math به صورت استاتیک (static) تعریف شده اند و برای استفاده از آن‌ها نیازی نیست تا از روی کلاس آبجکتی ایجاد شود. فقط کافی است نام کلاس را قبل از آن بیاوریم. (در مورد static در فصل شی گرایی صحبت می‌شود). همانطور که در کد مشاهده می‌کنید ما برای هر هفت نوع متد، نام کلاس Math را نوشته‌ایم. که خب مسلما اگر بخواهیم در برنامه‌ای که می‌نویسیم از متد‌های کلاس Math زیاد استفاده کنیم، آوردن نام کلاس برای تک تک متد‌ها کاری خسته کننده است. در جاوا یک نوع import دیگر وجود دارد که به صورت import static نوشته می‌شود. کاربرد این import دقیقا مانند import‌ یی است که برای پکیج‌ها انجام می‌دهیم. وقتی که این import را در برنامه انجام دهیم دیگر نیازی نیست که هر بار نام کلاس را قبل از متد بیاوریم. به کد زیر توجه کنید:

import-static

همانطور که مشاهده می‌کنید در خط اول import static را نوشته‌ایم و در استفاده از متد‌ها دیگر از نام کلاس Math استفاده نکرده‌ایم.

نگاهی عمیق‌تر به متد‌ها (توابع) در جاوا

در زبان‌های برنامه نویسی دیگری مثل ++C به متد‌ها تابع گفته می‌شود. اما در جاوا از کلمه‌ی متد (Method) استفاده می‌شود. در این آموزش ما یک مثال ساده از نحوه‌ی نوشتن یک متد و استفاده از آن (فراخوانی متد) در برنامه آشنا شدیم. اگر بخواهیم نحوه‌ی کارکرد متد‌ها را در یک جمله برای شما توضیح دهیم، متد‌ها مانند یک کارخانه هستند که از یک سمت ورودی‌هایی را دریافت می‌کنند و بعد بر روی این ورودی‌ها که شامل هر نوع داده‌ای می‌تواند باشد پردازش‌هایی را انجام می‌دهند و از سمت دیگر خروجی‌ای را تولید می‌کنند.

متد‌ها را به روش‌های مختلفی می‌توانیم طراحی کنیم. می‌توان نوع برگشتی‌ای برای آن مشخص نکرد (یعنی متد از نوع void باشد) و یا می‌توان برای آن مقدار برگشتی مشخص کرد (می‌تواند از نوع int, double, String و ... باشد). که اگر مقدار برگشتی برای آن‌ها مشخص کنیم، در آخر آن متد باید با استفاده از کلمه‌ی کلیدی return مقداری را برگرداند. در آموزشی که گفته شد متد ما مقدار برگشتی نداشت (یعنی از نوع void بود). اما در ادامه می‌خواهیم مثالی را برای شما بیاوریم که متد ما از نوع int باشد و مقداری را برگرداند. به کد زیر توجه کنید:

return-method

همانطور که در کد فوق مشخص است، ما در خط 8 یک متدی با نام sum که از نوع int است ساخته‌ایم. (منظور از int نوع برگشتی متد ما است و متد باید یک مقدار صحیح برگرداند. بنابراین از کلمه‌ی کلیدی void استفاده نمی‌کنیم). در داخل متد هم همانطور که معلوم است دو متغیر از نوع عدد صحیح با مقادیر تعیین شده تعریف کرده‌ایم. در آخر هم (خط 12) این دو متغیر را با هم جمع کرده‌ایم و با استفاده از کلمه‌ی کلیدی return مقداری را برگردانده‌ایم. (شاید برگرداندن مقدار کمی گنگ باشد. در ادامه متوجه می‌شوید). ما برای استفاده از این متد باید این متد را از داخل متد اصلی (main) فراخوانی کنیم. بنابراین برای فراخوانی متد فقط کافیست نام متد را بنویسیم. ما در متد main نام متد را در داخل جمله‌ی ;()System.out.println نوشته‌ایم. علت هم این است که می‌خواهیم مقداری که متد برمی‌گرداند را در کنسول مشاهده کنیم. بنابراین اگر برنامه را اجرا کنیم، خروجی اجرای برنامه‌ی ما 10 است. یعنی مقدار برگشتی متد ما حاصل جمع دو متغیری است که در داخل آن تعریف شده است.

حالا می‌خواهیم متد فوق را به گونه‌ای تغییر دهیم که هنگامی که متد sum را از طریق متد main فراخوانی می‌کنیم، اعدادی را در نظر بگیریم تا آن اعدادی که ما مشخص می‌کنیم در متد با هم جمع شوند. در متد مفهومی است با نام پارامتر که به متغیر‌هایی که در داخل پرانتز‌های باز و بسته‌ی متد قرار می‌گیرند گفته می‌شود. برای فهم این مطلب به کد زیر نگاه کنید:

method-with-parameter

در برنامه‌ی قبلی ما دو متغیر num1 و num2 را داخل بدنه‌ی متد تعریف کردیم. اما این‌بار همانطور که مشاهده می‌کنید در پرانتز‌های باز و بسته‌ی متد sum تعریف کرده‌ایم. این‌ها پارامتر‌های متد ما هستند و نکته‌ی بسیار مهمی که وجود دارد این است که باید در همان ابتدای استفاده از متد پارامتر‌های متد را مقدار دهی کنیم. در غیر این صورت برنامه‌ی ما کامپایل نمی‌شود. زیرا در جاوا مقدار پیش فرض برای یک پارامتر وجود ندارد. یعنی برای فراخوانی یک متدی که دارای پارامتر است، باید حتما مقدار تمام پارامتر‌های متد را به ترتیب مشخص کنیم. به خط 5 در داخل متد main توجه کنید. ما وقتی متد sum را فراخوانی کرده‌ایم، به ترتیب برای پارامتر‌های آن مقادیری را تعیین کرده‌ایم. شما می‌توانید هر مقدار دیگری را در نظر بگیرید. بنابراین اگر برنامه را اجرا کنید پاسخ 12 خواهد بود.

استفاده از پارامتر‌های متد main

همانطور که قبلا هم گفته شد، تمام برنامه‌های جاوا یک متد اصلی دارند که نام آن main است. (نام این متد دقیقا باید به همین شکل نوشته شود. در غیر اینصورت برنامه اجرا نمی‌شود). متد main نقطه‌ی شروع هر برنامه‌ی جاوا است. همانطور که در آموزشی که گفته شد مشاهده کردین، برای استفاده از یک متد حتما باید آن متد توسط برنامه نویس فراخوانی شود. در غیر این صورت بود و نبود آن متد هیچ فرقی ندارد. اما در مورد متد main این قضیه فرق دارد. برنامه باید اجرا شود تا ما (برنامه نویس) بتوانیم متد‌هایی را در برنامه فراخوانی کنیم. سوال اینجاست که متد main چگونه اجرا می‌شود؟ پاسخ این است که متد ()main توسط برنامه نویس فراخوانی نمی‌شود، بلکه در زمان اجرا توسط JVM فراخوانی می‌شود. هنگامی که ما با استفاده از ابزار java کلاس را اجرا می‌کنیم، ماشین مجازی جاوا متد ()main درون کلاس مشخص شده را یافته و اجرا می‌کند.

با توجه به توضیحات قسمت قبل، گفتیم که در جاوا مقدار پیش فرض برای پارامتر‌ها وجود ندارد. پارامتر‌های ورودی متد main یک آرایه‌ای از رشته‌ها است (String[] args) (در مورد آرایه‌ها بعدا توضیح داده خواهد شد). اما ما هیچگاه مقادیر پارامتر‌های متد main را مشخص نکرده‌ایم. پس چگونه برنامه‌ی ما اجرا می‌شود؟ پاسخ این است که از آنجایی که متد main توسط JVm فراخوانی می‌شود، در فراخوانی آن می‌توانید هیچ پارامتری را مشخص نکنید، در این صورت JVM متد ()main را با یک پارامتر بدون مقدار (null) فراخوانی می‌کند.

آرایه‌ها: در این جلسه از آموزش ما نمی‌خواهیم در مورد آرایه‌ها صحبت کنیم. اما اندکی در مورد آن‌ها توضیح می‌دهیم تا کمی با آن‌ها آشنا شوید. آرایه‌ها پر کاربرد‌ترین ساختمان داده‌ها در برنامه نویسی هستند. درواقع آرایه‌ها لیستی از داده‌ها هستند که همگی آن‌ها از یک نوع هستند. (یعنی یا همه‌ی آن‌ها از نوع int هستند. یا از نوع double یا از نوع String و ... هستند). همانطور که گفته شد آرایه‌ها لیستی از داده‌ها هستند. بنابراین برای دسترسی به هر خانه‌ی آرایه باید با استفاده از ایندکس یا اندیس آن آرایه به آن خانه‌ی آرایه دسترسی پیدا کرد. ایندکس در واقع شماره‌ای است که برای هر خانه‌ی حافظه در نظر گرفته می‌شود. نکته‌ی دیگری که باید به آن توجه کنیم این است که شماره‌ی خانه‌های آرایه از صفر شروع می‌شود. یعنی خانه‌ی یکم شماره‌ی صفر دارد. و آرایه‌ای با 10 خانه، آخرین ایندکس آن 9 است. در برنامه نویسی برای دسترسی به خانه‌ی مثلا اول آرایه باید به شکل زیر کدی را بنویسیم:

array[0];

کد بالا به این معنی است که نام آرایه‌ی ما array است و به خانه‌ی یکم اشاره می‌کند. ایندکس آرایه را هم در بین یک جفت کروشه می‌نویسیم. به این صورت به آن خانه‌ی آرایه دسترسی پیدا می‌کنیم.

حالا ما می‌خواهیم از پارامتر‌های متد main استفاده کنیم. یعنی می‌خواهیم مقادیری را برای آن‌ها در نظر بگیریم و آن‌ها را در خروجی استاندارد چاپ کنیم. برای این کار دو راه وجود دارد. یکی اینکه از طریق Command Prompt موقع‌ای که می‌خواهیم برنامه را اجرا کنیم پارامتر‌ها را ارسال کنیم. و راه دیگر که راه آسان تری است از محیط توسعه‌ی اکلیپس برای این کار استفاده کنیم. ما ابتدا روش اول را آموزش می‌دهیم. به کد زیر توجه کنید:

main

به پارامتر متد main توجه کنید. آرایه‌ای از جنس String تعریف شده است. (نحوه‌ی تعریف آرایه به این شکل است). در خطو 5 و 6 و 7 هم با استفاده از جمله‌ی ;()System.out.println محتویات خانه‌های 1 تا 3 آرایه را چاپ کرده‌ایم. (توجه کنید که اگر به همین شکل برنامه را اجرا کنید با خطا مواجه می‌شوید. زیرا هنوز مقادیری برای پارامتر متد main در نظر نگرفته‌ایم). ابتدا این برنامه را با استفاده از Command Promt کامپایل کنید تا فایل class. آن ایجاد شود. سپس به عکس زیر توجه کنید:

cmd

همانطور که در تصویر مشاهده می‌کنید ما ابتدا برنامه‌ی خودمان را کامپایل کرده‌ایم و سپس با استفاده از ابزار java می‌خواهیم کلاس MainClass را اجرا کنیم. ما در برنامه‌ی خود محتویات سه خانه‌ی ابتدایی پارامتر متد main را در خروجی استاندارد چاپ کرده‌ایم. بنابراین در اینجا هنگام اجرای برنامه باید مقادیری را برای آن پارامتر‌ها در نظر بگیریم. همانظور که مشاهده می‌کنید مقادیر خانه‌های یک تا سه آرایه مشخص شده است. برای هر خانه چیزی را که می‌خواهیم می‌نویسیم و سپس یک Space می‌زنیم. هنگامی که Space می‌زنیم به سراغ خانه‌ی بعدی آرایه می‌رومیم. خروجی برنامه هم در کادر قرمز رنگ در تصویر مشخص شده است.

اما روشی راحت‌تر برای ارسال پارامتر به متد ()main وجود دارد و آن استفاده از اکلیپس است. برای ارسال پارامتر از طریق اکلیپس باید به پنجره‌ی Run Configurations مراجعه کنید. به تصویر زیر توجه کنید:

run-configurations

همانطور که در تصویر مشخص است دو راه برای دسترسی به Run Configurations وجود دارد. یا در فیلد Quick Access عبارت Run Configurations را سرچ کنید و یا اینکه بر روی علامت پیکان دکمه‌ی Run کلیک کنید تا منوی آن باز شود و گزینه‌ی مشخص شده را انتخاب کنید. بعد از انتخاب گزینه‌ی مورد نظر وارد پنجره‌ی زیر می‌شوید:

run-configurations

در پنجره‌ی فوق ابتدا تب Arguments را انتخاب کنید و در قسمت Program Arguments مقادیری را تایپ کنید و در آخر بر روی دکمه‌ی Run کلیک کنید. برنامه اجرا می‌شود و دقیقا این سه مقداری که ما در اینجا نوشته‌ایم در خروجی چاپ می‌شود.

تمرین

  • برنامه‌ای بنویسید که از طریق کنسول نام خود را وارد کنید و بعد برنامه نام شما را به صورت برعکس در خروجی استاندارد چاپ کند. (توجه داشته باشید که خودتان الگوریتم این برنامه را بنویسید و به هیچ عنوان از متد‌های جاوا استفاده نکنید). (برای نوشتن این برنامه در مورد متد ()charAt جستجو کنید).
  • برنامه‌ای بنویسید و در آن یک متد تعریف کنید که آن متد یک عدد را به عنوان پارامتر دریافت کند و تعیین کند که آیا آن عدد اول است یا خیر.
  • متدی بنویسید که یک عدد را به عنوان پارامتر دریافت کند و تعیین کند که آیا آن عدد Perfect است یا خیر.

توضیح: عدد Perfect یا عدد کامل یک عدد صحیح مثبت است که مجموع همه‌ی مقسوم علیه‌های مثبتش (به غیر از خود عدد) برابر با خود عدد باشد. به عنوان مثال اعداد 6 و 28 اعداد کامل هستند.

نکته‌ی پایانی: در این آموزش از دانش مهندس احمد رضا صدیقی استفاده شده است.

تبلیغات
داغ‌ترین مطالب روز

نظرات

تبلیغات