Java Book
Java Book
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ب
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
ج
تقدیم هب انئب امام عصر ،حضرت آیت اهلل خامنه ای هک عصا زدنش ضرب آهنگ حیدری دارد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
د
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
1
فهرست
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
2
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
3
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
4
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
5
شروع می شوند .خوشبختانه بخش های بعدی این مورد را برای شما آسان تر کرده اند.
ما تصمیم داریم تمام کدهای خود را با استفاده از یک قطعه نرم افزار به نام NetBeansبنویسیم .این نرم
افزار یکی از محبوب ترین IDEها ( Interface Development Environmentمحیط گسترش اینترفیس) در
جهان برای نوشتن برنامه های جاوا می باشد .شما به اختصار خواهید دید که این برنامه چگونه خواهد بود .اما
قبل از که NetBeansکار کند ،الزم است که مولفه ها و فایل های مورد نیاز جاوا را نصب کنید .اولین آن
کامپیوتر شماLinux ، Windowsیا Mac OSرا اجرا می کند ،همه ی اینها در جاو یکی است .دلیل اینکه می
تواند روی هر سیستم عاملی اجرا شود به علت ماشین مجازی جاوا ) (Java Virtual Machineمی باشد .
ماشین مجازی برنامه ای است که تمام کد شما را به درستی پردازش می کند .بنابراین الزم است که قبل از
جاوا متعلق به شرکتی به نام Sun Microsystemsمی باشد ،بنابراین الزم است برای گرفتن ماشین مجازی
جاوا ،که به عنوان ) Java Runtime Environment (JREنیز شناخته می شود ،وارد وب سایت Sun
http://java.com/en/download/index.jsp
شما می توانید با کلیک کردن بر روی لینک "?"Do I have Javaچک کنید که آیا JREرا سیستم خود دارید
یا نه .این لینک را می توانید زیر دکمه ی Downloadدر باالی صفحه پیدا کنید (مگر اینکه Sunجای موارد را
عوض کرده باشد ).وقتی که روی لینک کلیک می کنید ،کامپیوتر شما برای JREاسکن خواهد شد .سپس به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
6
شما گفته می شود که این برنامه را دارید یا نه .اگر نداشته باشید ،فرصت دانلود و نصب آن به شما داده می
http://java.com/en/download/manual.jsp
"("manualدستی) در لینک های باال به معنای دانلود دستی )" ("manual downloadمی باشد .صفحه به
شما لینک های دانلود و دستور هایی برای سیستم عامل های مختلف ارائه می دهد.
پس از دانلود و نصب ،الزم است کامپیوتر خود را ریست کنید .پس از انجام این کار شما برنامه ی Java
برنامه های جاوا روی کامپیوتر شما اجرا خواهند شد .برای نوشتن کد و امتحان کردن آن به نرم افزاری به نام
http://tahlildadeh.com
موردی که ما قصد استفاده از آن را داریم Java SEنامیده می شود . (SEمخفف Standard Editionمی
باشد ،ویرایش استاندارد) .روی لینک و سپس روی " "Java SE (JDK) 6 Downloadکلیک کنید .پس از آن
وارد صفحه ای با یک لیست گیج کننده از گزینه ها برای دانلود می شوید .از آنجایی که قصد استفاده از
صفحه ای شوید که در مورد سیستم عامل از شما سوال می پرسد .روی Continueکلیک کنید تا در نهایت
دانلود مورد نظر را دریافت کنید .یک پیام هشدار ،گرچه – این دانلود در هنگام نگارش بزرگ خواهد بود،
بیشتر از 130مگابایت! هنگامی که JDKو NetBeansرا دانلود کردید ،آن را روی سیستم خود نصب کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
7
برای نوشتن کد خود ،قصد استفاده از NetBeansرا داریم .به هر حال قبل از آغاز کار نرم افزار ،در اینجا
چگونگی کار کردن موارد در دنیای جاوا توضیح داده شده است.
نگارش کد شما وجود دارد ).این کد source codeنامیده می شود و با file extension .javaذخیره می
شود .سپس برنامه ای به نام Javacبرای تبدیل source codeبه Java Byte Codeاستفاده می شود.
این عمل compilingنامیده می شود .پس ازاینکه Javacفرایند کامپایل Java Byte Codeرا به پایان
رسانده است ،یک فایل جدید با extension .classایجاد می کند ( .حداقل اگر هیچ خطایی رخ ندهد این کار
را انجام می دهد ).زمانی که فایل گروه ایجاد شده است ،می تواند روی Java Virtual Machineاجرا شود .
بنابراین
NetBeansهمه ی فرایند ایجاد و کامپایل را برای شما کنترل می کند ،گرچه در پشت صحنه source code
های شما را گرفته و فایل جاوا ایجاد می کند .این برنامه Javacرا آغاز کرده و فایل گروه را کامپایل می کند.
سپس NetBeansمی تواند برنامه ی شما را داخل نرم افزار خود اجرا کند .این امر از باز کردن یک پنجزه ی
از آنجایی که این برنامه خیلی سریع نیست ،ممکن است مجبور شوید مدتی منتظر بمانید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
8
برای شروع یک پروژه ی جدید روی File > New Projectاز منوی NetBeansدر باال کلیک کنید .پس از آن
ما قصد ایجاد یک Java Applicationرا داریم ،بنابراین گزینه ی را Javaدر زیر Categoriesو سپس Java
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
9
در قسمت Project Nameدر قسمت باال ،یک نام برای پروژه ی خود تایپ کنید .به چگونگی تغییر متن در
پایین دقت داشته باشید که برای هماهنگی با نام پروژه اتفاق می افتد( در تکست باکس در سمت راست
firstproject.Main
اگر آن را به این شکل رها کنیمClass ،دارای نام Mainخواهد بود .آن را به FirstProjectتغییر دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
10
اکنون گروه ایجاد شده FirstProjectنامیده می شود ،که با Fو Pبزرگ نوشته می شود .پوشه نیز
موقعیت پیش فرض برای ذخیره ی پروژه ی شما درتکست باکس Project Locationظاهر می شود .اگر تمایل
داشتید ،می توانید آن را تغییر دهید . NetBeansنیز یک فولدر در همان موقعیت با نام پروژه ی شما ایجاد
خواهد کرد .روی دکمه ی Finishکلیک کنید و NetBeansنیز به کار خود در ایجاد فایل های الزم برای شما
وقتی که NetBeansبه IDEبازمی گردد ،نگاهی به بخش Projectsدر باال و سمت چپ صفحه داشته
باشید ( .اگر نمی توانید آن را ببینید ،روی Window > Projectsاز نوار منو در قسمت باالی نرم افزار کلیک
کنید)
روی عالمت به عالوه کلیک کنید تا پروژه ی خود را باز کنید ،پس از آن موارد زیر را مشاهده خواهید کرد.
اکنون Source Packagesرا باز کنید تا مجددا نام پروژه ی خود را ببینید .آن را باز کنید ،شما فایل Javaرا
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
11
همین source codeباید در سمت راست ،در تکست باکس بزرگ نمایش داده شود ،که FirstProject.java
نامیده می شود .اگر شما نمی توانید یک پنجره ی کد مشاهده کنید ،روی FirstProject.javaدر باالی پنجره ی
پنجره ی برنامه نویسی ) (coding windowکه ظاهر می شود ،باید مشابه تصویر زیر باشد( .ما نام نویسنده
موردی که باید به آن اشاره کرد این است که در اینجا گروه FirstProjectنامیده می شود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
12
این همان نام فایل java sourceدر پنجره ی Projectمی باشد : FirstProject.java.وقتی که برنامه های
خود را اجرا می کنید ،کامپایلر انتظار دارد که فایل منبع و نام گروه با هم هماهنگ باشند .بنابراین اگر فایل
.javaبا عنوان firstProjectنامگذاری می شود ،اما گروه FirstProjectنامیده می شود ،شما یک خطا در
کامپایل دریافت خواهید کرد .این به خاطر این است که اولین fبا حرف کوچک نوشته شده و دومین با حرف
بزرگ است.
دقت داشته باشید که گرچه پوشه را نیز firsprojectنامیده ایم ،اما این الزم نیست .می توانستیم پوشه را
someprogrammeنامگذاری کنیم .بنابراین نام پوشه نباید با نام فایل منبع جاوا یا گروه در فایل منبع یکی
باشد .بلکه فقط نام فایل منبع جاوا و نام گروه است که باید با هم هماهنگ باشند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
13
بخش های خاکستری شده کامنت ها هستند .وقتی که برنامه اجرا می شود ،کامنت ها نادیده گرفته می شوند.
بنابراین شما می توانید هرچه تمایل دارید در داخل کامنت عای خود تایپ کنید .اما معموال به این شکل است
که کامنت هایی را ارائه می دهید که سعی دارد آنچه می خواهید انجام دهید را توضیح دهد .می توانید با تایپ
کردن دو اسلش که با کامنت شما دنبال می شود ،یک خط کامنت مجزا داشته باشید.
اگر می خواهید بیشتر از یک خط داشته باشید نیز می توانید این کار را انجام دهید.
در کامنت باال دقت داشته باشید که چگونه با */شروع می شود .در عوض برای پایان کامنت نیز * /را داریم.
چیزی به نام کامنت Javadocوجود دارد .می توانید دو نمونه از آن را در تصویر برنامه نویسی در صفحه ی
قبل مشاهده کنید .یک کامنت Javadocبا یک اسلش دو به به جلو و دو ستاره ( )**/شروع می شود و با یک
ستاره و یک اسلش ) ( */نیز به پایان می رسد .هر خط از کامنت با یک ستاره شروع می شود.
شده می تواند به یک صفحه ی HTMLتبدیل شود که برای دیگران مفید خواهد بود .با کلیک کردن بر روی
Runاز منو در باالی ، NetBeansمشاهده می کنید که چگونه به نظر می رسند .از منوی Runعبارت
Generate Javadocرا انتخاب کنید .به هرحال از آنجایی که هنوز کدی ننوشته اید ،مورد زیادی برای
در این مرحله از کار برنامه نویسی خود می توانید کامنت هایی را که NetBeansبرای شما تولید می کند،
حذف کنید .در اینجا دوباره برنامه ی ما را با کامنت های حذف شده مشاهده می کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
14
مشاهده می کنید که ابتدا پوشه را نامگذاری کرده ایم .دقت داشته باشید که چگونه یک خط با نقطه ویرگول
به پایان می رسد .اگر این نقطه ویرگول را نگذارید ،برنامه کامپایل نخواهد شد.
;package firstproject
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
15
می توانید یک گروه را به عنوان یک بخش کد )(code segmentدر نظر گیرید .اما باید به جاوا بگویید که
بخش های کد کجا شروع و کجا به پایان برسند .این کار را می توانید با آکوالد انجام دهید .شروع یک بخش کد
با آکوالد سمت چپ { و پایان آن با آکوالد سمت راست } انجام می شود .هرچیزی در داخل این آکوالدها به آن
آنچه در داخل این آکوالدهاست ،یک code segmentدیگر است .این مورد
لغت mainدر اینجا قسمت مهمی است .هروقت یک برنامه ی جاوا آغاز می شود ،به دنبال متودی به نام main
می باشد( .یک متود در واقع بخشی از یک کد می باشد ،در مورد اینها بعدها بیشتر فرا خواهید گرفت) .سپس
هر کدی را در داخل این آکوالدها برای mainاجرا می کند .اگر متود mainرا در برنامه های جاوای خود نداشته
باشید ،پیغام های خطا دریافت خواهید کرد .اما همانطور که از نام آن پیداست ،نقطه ی ورودی اصلی برای
در حال حاضر قسمت های آبی قبل از لغت mainمی توانند نادیده گرفته شوند.
(به هرحال اگر عالقمند هستید ،عمومی ) (publicبه این معناست که متود در خارج از این گروه نیز قابل
مشاهده است ،و استاتیک نیز یعنی الزم نیست که یک آبجکت جدید ایجاد کنید و voidیعنی اینکه مقداری
گزارش نمی شود وفقط با همین مقدار ادامه می دهد .بخش های بین آکوالدهای mainبا عنوان خط فرمان
argumentمطرح می شوند)
نکته ی مهمی که باید به خاطر داشته باشید این است که ما گروهی با نام FirstProjectداریم .این گروه حاوی
یک متود به نام mainمی شود .هر دو دارای مجموعه آکوالدهای مربوط به خود می باشند .اما بخش مهم کد به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
16
خاصی انجام نمی دهد اما هنوز کامپایل خواهد شد .بنابراین اجازه بدهید یک خط از کد را اضافه کنیم ،سپس
متونی را به پنجره ی consoleخروجی می دهیم .خط زیر را به متد mainخود اضافه کنید.
وقتی که پس از Systemنقطه را تایپ می کنیدNetBeans ،نیز با نمایش لیستی از گزینه های موجود سعی
روی آن دابل کلیک کنید تا به کد خود بیفزایید .دوباره لیست گزینه ها ظاهر می شود.
) (printlnرا انتخاب کنید .آنچه این گزینه انجام می دهد چاپ یک خط از متن زوی صفحه ی خروجی می باشد.
اما نیاز خواهید داشت که متن خود را بین آکوالدهای printlnقرار دهید .متن شما الزم است بین یک جفت
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
17
زمانی که نقل قول های خود را در محل قرار داده اید ،متن خود را تایپ کنید.
دقت داشته باشید که خط با یک نقطه ویرگول به پایان می رسد .هر خط کاملی از کد در Javaنیاز به نقطه
ویرگول در انتهای خود دارد .اگر این عالمت را در انتهای آن قرار ندهید ،برنامه کامپایل نخواهد شد.
بسیارخوب ،اکنون می توانیم جلوتر برویم و این برنامه را امتحان کنیم .ابتدا کار خود را ذخیره کنید .می توانید
روی File > Saveیا File > Save Allکلیک کنید .یا روی آیکن Saveدر نوار ابزار NetBeansکلیک کنید.
درست زیر کد ،اجرا خواهد شد .به این دلیل است که الزم نیست یک پنجره ی ترمینال یا consoleرا آغاز
روش های مختلفی برای اجرای برنامه در NetBeansوجود دارد .ساده ترین راه فشاردادن دکمه ی F6روی
صفحه کلید می باشد .همچنین می توانید با استفاده از منوها در باالی NetBeansبرنامه ها را اجرا کنید.
منوی Runرا قرار داده و سپس Run Main Programmeرا انتخاب کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
18
همچنین می توانید روی فلش سبز رنگ در نوار ابزار NetBeansکلیک کنید.
راه دیگر برای اجرای برنامه هایتان پنجره ی Projectsمی باشد .این روش اطمینان خواهد داد که source
codeدرست قرار است که اجرا شود .به سادگی روی فایل منبع جاوای خود در پنجره ی projectsکلیک راست
کنید که منویی برای شما ظاهر خواهد شد .در این منو Run Fileرا انتخاب کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
19
با استفاده از یکی از متودهای باال برنامه ی خود را اجرا کنید .متوجه خواهید شد که در پنجره ی Output
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
20
دومین خط در پنجره ی Outputدر باال کد مورد نظر ما می باشد : My First Project.با کلیک کردن روی فلش
های سبز رنگ در باال و سمت چپ پنجره ی ،Outputمی توانید آن را مجددا و با سرعت اجرا کنید.
ایجاد یک فایل JARدارید (Java Archive). NetBeansمی تواند همه ی این کار را برای شما انجام دهد .از
منوی Runدر باال Clean and Build Main Projectرا انتخاب کنید.
وقتی کاری انجام می دهیدNetBeans ،آن را ذخیره می کند و سپس تمام فایل های الزم را ایجاد می کند .این
برنامه فولدری به نام distایجاد کرده و تمام فایل ها را در آن قرار می دهد .اگر نگاهی به محل پروژه های
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
21
باید یک فایل JARو یک تکست فایل READMEمشاهده کنید .تکست فایل حاوی دستورالعمل هایی در
اکنون که فراگرفته اید چگونه فایل های منبع جاوا را اجرا کنید ،اجازه بدهید کمی برنامه نویسی کنیم.
دیگر بخش های حافظه ،و موارد دیگر باشد .داده نام گذاری می شود ،طوریکه در صورت نیاز می تواند مجددا
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
22
فراخوانده شود .نام و مقدار آن با عنوان متغیر ) (Variableشناخته می شوند .ما با مقادیر عددی شروع می
کنیم.
برای ذخیره ی یک عدد در جاوا ،باید گزینه های زیادی داشته باشید .تمام اعداد مانند 12 ،10 ،8و غیره با
استفاده از متغیر intذخیره می شوند Int (.مخفف ( integerعددصحیح) می باشد .).اعداد ممیز شناور مانند
12.8 ،10.5 ،8.4و غیره با استفاده از متغیر دوگانه ذخیره می شوند .شما ذخیره سازی را با یک عالمت تساوی
( = ) انجام می دهید .اجازه بدهید چند مثال را بررسی کنیم (می توانید از کد FirstProjectبرای این مثال ها
استفاده کنید).
برای تنظیم یک عدد کامل (عدد صحیح) ،موارد زیر را به متود mainاز بخش قبل اضافه کنید:
;int first_number
}
بنابراین برای اینکه به جاوا بگویید که می خواهید یک عدد کامل را ذخیره کنید ،ابتدا لغت intرا تایپ کنید که
پس از آن یک فاصله قرار می گیرد .سپس الزم است برای متغیر عدد صحیح خود یک نام انتخاب کنید .شما می
توانید هر نامی که می خواهید برای آنها انتخاب کنید ،اما در این مورد قوانینی نیز وجود دارد.
نام متغیرها نباید با عدد شروع شود .بنابراین نام first_numberدرست می باشد اما نام st_number 1
درست نیست .می توانید اعداد را در هرجایی از نام متغیر به جز ابتدای آن قراردهید.
نام های متغیرها نمی تواند مشابه لغات کلیدی Javaباشد .موارد بسیاری از این گونه وجود دارد که در
نمی توانید در نام های متغیرها فاصله داشته باشید .اطالعیه ی متغیر ،int first numberخطایی را دریافت
خواهد کرد .ما از متغیرهای تاکید شده استفاده کرده ایم ،اما متداول این است که حرف اول با حروف کوچک
انگلیسی و حرف بعدی یا بقیه ی حروف را با حرف بزرگ انگلیسی نوشته شوند:
firstNumber, myFirstNumber
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
23
نام های متغیرها موارد هوشمندی هستند ،بنابراین firstNumberو FirstNumberنام های متفاوتی برای
متغیرها می باشند.
برای ذخیره ی موردی در متغیری به نام ، first_numberیک عالمت تساوی و سپس مقداری مورد نظر برای
;int first_number
;first_number = 10
}
بنابراین این برنامه به جاوا می گوید که می خواهید مقداری از 10را در متغیر عدد صحیح که first_number
اگر تمایل دارید ،می توانید تمام این کار را در یک خط انجام دهید:
}
برای اینکه تمام موارد را در عمل ببینید ،متود printlnرا به این شکل تغییر دهید:
آنچه ما اکنون در بین آکوالدهای printlnداریم ،متن های مستقیمی هستند که در عالمت نقل قول محدود
شده اند:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
24
;) + first_number
عالمت به اضافه به معنای اتصال به یکدیگر " "join togetherمی باشد .بنابراین ما متن و نام متغیر خود را به
پنجره ی شما اکنون باید مانند زیر به نظر برسد (دقت داشته باشید که هر خط با نقطه ویرگول به پایان می
رسد:).
برنامه ی خودرا اجرا کنید و باید صفحه ی زیر را در پنجره ی Outputدر پایین مشاهده کنید:
بنابراین عددی را که در متغیر ذخیره کرده ایم ،به نام ،first_numberخروجی می باشد پس از عالمت تساوی.
اجازه بدهید چند جمع ساده را امتحان کنیم .چند متغیر intبه کد خود اضافه کنید ،یکی برای ذخیره ی رومین
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
25
دقت کنید که چگونه سه متغیر نام روی یک خط داریم .اگر متغیرها از یک نوع باشند ،شما می توانید این کار را
در جاوا انجام دهید (برای مورد ما نوع int).بنابراین نام هر متغیر با کاما (ویرگول) جدا می شود.
;first_number = 10
;second_number = 20
;answer = first_number + second_number
برای متغیر پاسخ ،می خواهیم اولین عدد را به دومین عدد اضافه کنیم .جمع کردن با عالمت به اضافه ) ( +
انجام می شود .بنابراین Javaمقادیر را در first_numberو second_numberبه یکدیگر اضافه می کند .
وقتی این کار تمام شد ،مجموع را در متغیر واقع در سمت راست تساوی ذخیره می کند .بنابراین به جای
اختصاص دادن 10یا 20به نام متغیر ،عمل جمع را انجام خواهد داد و سپس اختصاص می دهد .در موردی که
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
26
;answer = 10 + 20
اما جاوا تقریبا می داند که در داخل دو متغیر first_numberو second_numberچه چیزی وجود دارد،
مجددا یک متن مستقیم را که با عالمت نقل قول احاطه شده ،با نام متغیر ترکیب می کنیم .پنجره ی برنامه
یک عدد ذخیره کرده است .یک عدد دوم ذخیره کرده است .این دو عدد را با یکدیگر جمع کرده است .نتیجه ی
جمع را در یک متغیر سوم ذخیره کرده است .نتیجه را چاپ کرده است .شما مستقیما نیز می توانید از اعداد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
27
استفاده کنید .خط پاسخ را مانند زیر تغییر دهید ;: answer = first_number + second_number + 12
برنامه ی خود را مجددا اجرا کنید .چه چیزی چاپ شده است؟ همان موردی است که انتظار داشتید؟ می توانید
اعداد کامال بزرگی در متغیر نوع intذخیره کنید .حداکثر مقدار 2147483647می باشد .اگر یک عدد منفی
مورد نظر شماست ،کمترین مقداری که می توانید داشته باشید -2147483648می باشد .اگر اعداد بزرگتر و
یا کوچکتر می خواهید ،می توانید از متغیر عددی دیگری استفاده کنید ،: doubleکه آنها را در بخش بعدی
متغیر doubleبرای نگهداری مقادیر ممیزی شناور نیز استفاده می شود .یک مقدار ممیزی شناور عددی مانند
10.1 ،12.5 ،8.7و غیره می باشد .به عبارت دیگر این عدد ممیزی در انتها دارد .اگر سعی کنید یک مقدار
ممیزی را در یک متغیر intذخیره کنیدNetBeans ،زیر کد پیش فرض را خط خواهد کشید .اگر سعی کنید
برنامه را اجرا کنید ،کامپایلر یک پیغام خطا ارائه می دهد .اجازه بدهید با متغیرهای doubleکمی تمرین کنیم.
از بخش intرا به doubleتغییر دهید .بنابراین این مورد را نیز تغییر دهید:
به خط زیر:
;first_number = 10.5
;second_number = 20.8
بقیه ی برنامه را همانطور که هست رها کنید .پنجره ی برنامه نویسی شما باید مشابه زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
28
برنامه ی خود را مجددا اجرا کنید ،پنجره ی خروجی باید مانند زیر باشد:
تغییر مقادیر ذخیره شده در first_numberو second_numberرا امتحان کنید .از هر مقداری که تمایل
دارید ،استفاده کنید .برنامه ی خود را اجرا کرده و نتیجه را مشاهده کنید.
در بخش بعدی در مورد دو نوع متغیر دیگر جاوا فرا خواهید گرفت : shortوfloat.
کوچکتر استفاده می شود و دامنه ی آن بین منفی 32768و مثبت 32767می باشد .به جای استفاده از intدر
کد خود مانند صفحات قبل ،می توانستیم از متغیر shortاستفاده کنیم .اگر مطمئن هستید که متغیری را که
مخواهید ذخیره کنید ،بیشتر از 32767و کمتر از -32768نیست ،باید فقط از متغیر shortاستفاده کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
29
متغیر doubleرا که استفاده کردیم ،می تواند اعداد ممیزی شناور واقعا بزرگ را ذخیره کند .به جای استفاهد
از ، doubleمتغیر floatنیز می تواند استفاده شود .هنگام ذخیره ی یک مقدار در یک متغیر ، floatنیاز به
بنابراین حرف fبعد از عدد اما قبل از نقطه ویرگول در انتهای خط قرار می گیرد .برای مشاهده ی تفاوت بین
حساب ساده ) ( Simple Arithmeticبا متغیرهایی که استفاده کرده اید ،می توانید از نمادهای زیر نیز برای
انجام محاسبت استفاده کنید( + :عالمت جمع) _ (عالمت منفی) *(عالمت ضرب که یک ستاره است/ ).
(عالمت تقسیم که یک اسلش رو به جلو می باشد ).این تمرین را امتحان کنید :عالمت جمع را که برای اضافه
کردن first_numberو second_numberاستفاده می شود ،حذف کنید .آن را با نمادهای باال جایگزین کنید،
ابتدا عالمت منفی ،سپس عالمت ضرب و در نهایت عالمت تقسیم .پاسخ به مورد آخر ،تقسیم ،باید یک عدد
واقعا بزرگ به شما ارائه دهد .عددی که باید برای تقسیم ارائه دهید 0.5048076923076923می باشد.
این به این دلیل است که شما از متغیر نوع doubleاستفاده کرده اید .به هرحال doubleرا به floatتغییر
دهید .سپس حرف fرا به انتهای اعداد اضافه کنید .بنابراین کد شما باید مانند زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
30
وقتی که کد باال را اجرا می کنید ،اکنون پاسخ 0.5048077می باشد .جاوا 6عدد اول بعد از ممیز را گرفته و
سپس بقیه را گرد کرده است . ( doubleیک عدد 64بیتی است و floatفقط 32بیتی می باشد).
;first_number = 100
;second_number = 75
;third_number = 25
سوم را که 25است اضافه کنید .کجکوع 50خواهد بود .به هرحال اگر مد نظر شما این نباشد چطور؟ اگر تمایل
داشته باشید اعداد دوم و سوم را با هم اضافه کنید و سپس مجموع را از اولین عدد کسر کنید ،چطور؟
بنابراین 75+25است که پاسخ 100می باشد .سپس آن را از اولین عدد کسر کنید که 100می باشد .اکنون
برای اطمینان از اینکه جاوا کاری را انجام می دهد که شما می خواهید ،می توانید از آکوال استفاده کنید .بنابراین
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
31
نمادهای ریاضی خود را به (که اپراتور نامیده می شوند) به جمع و ضرب تبدیل کنید:
بدون آکوال تصور می کنید که Javaاز چپ به راست محاسبه را انجام می دهد .بنابراین تصور می کنید که عدد
اول را به عدد دوم اضافه می کند تا 175به دست آورد .سپس تصور می کنید که در عدد سوم ضرب می شود
که 25می باشد .بنابراین پاسخ 4375خواهد بود .سپس برنامه را اجرا کنید .پاسخ حقیقی را که شما به دست
دلیل اینکه جاوا پاسخ اشتباه ارائه می دهد Operator Precedenceاست .جاوا برخی از نمادهای ریاضی را
مهم تر از بقیه در نظر می گیرد .این برنامه ضرب را مقدم به جمع می داند ،بنابراین عملیات ضرب را قبل از جمع
انجام می دهد ،سپس جمع را انجام می دهد .بنابراین جاوا در حال انجام عملیات زیر می باشد:
با قرار دادن آکوالدها در جای درست مشاهده می کنید که عدد دوم در عدد سوم ضرب شده است .سپس
مجموع به اولین عدد اضافه می شود .بنابراین حاصل 75در 25عدد 1875می باشد .عدد 100را اضافه
اگر آن را به روش دیگری می خواهید ،فراموش نکنید که با استفاده از آکوالدها به جاوا اعالم کنید:
تقسیم مشابه ضرب می باشد :جاوا ابتدا تقسیم را انجام می دهد وسپس جمع و یا تفریق را .خط پاسخ خود را
پاسخ این بار 7خواهد بود .بنابراین بدون آکوالدها ،جاوا ابتدا تقسیم را انجام می دهد و سپس 100را به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
33
ضرب و تقسیم – به طور مساوی رفتار می شوند ،اما نسبت به جمع و تفریق دارای اولویت هستند .جمع و
تفریق – به طور مساوی رفتار می شوند اما نسبت به ضرب و تقسیم اولویت پایین تری دارند .بنابراین اگر فکر
می کنید که جاوا پاسخ اشتباه به شما می دهد ،به یاد داشته باشید که Operator Precedenceمهم می
باشد و چند آکوالد اضافه می کند .در قسمت بعدی به چگونگی ذخیره ی مقادیر با استفاده از Javaنگاهی
خواهیم داشت.
چندید کاراکتر را ذخیره کنید .برای ذخیره ی تنها یک کاراکتر ،متغیر charاستفاده می شود .گرچه معموال تمایل
دارید بیشتر از یک کاراکتر را ذخیره کنید .برای انجام این کار نیاز به متغیر نوع رشته ای دارید.
با کلیک کردن بر روی File > New Projectاز نوار منو در باالی ،NetBeansیک پروژه ی جدید را آغاز کنید.
وقتی دیالوگ باکس New Projectظاهر می شود ،اطمینان حاصل کنید که Javaو Java Application
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
34
روی Nextکلیک کرده و StringVarsرا با عنوان نام پروژه تایپ کنید .اطمینان حاصل کنید که در قسمت
Create Main Classیک تیک وجود دارد .سپس Mainرا پس از stringvarsحذف کرده و در عوض
بنابراین نام پروژه StringVarsاست و نام گروه نیز StringVariablesمی باشد .روی دکمه ی Finishکلیک
کنید ،پنجره ی برنامه نویسی شما مانند تصویر زیر خواهد بود ( ما تمام کامنت های پیش فرض را حذف کرده
ایم ).دقت داشته باشید که تمام حروف مربوط به نام پوشه با حروف کوچک نوشته شده اند)،(stringvars
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
35
برای برقراری یک متغیر ، stringلغت Stringرا تایپ کنید که پس از آن نام متغیر قرار می گیرد .توجه داشته
باشید که در لغت Stringحرف Sبزرگ نوشته شده است .مجددا خط با یک نقطه ویزگول به پایان می رسد:
;String first_name
با تایپ کردن یک عالمت تساوی ،یک مقدار جدید را به متغیر stringخود اختصاص دهید .پس از عالمت
تساوی متنی را که می خواهید ذخیره کنید ،بین دو عالمت نقل قول (") قرار می گیرد:
;"first_name = "William
متغیر دوم stringرا برقرار کنید تا یک نام یا نام خانوادگی را حفظ کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
36
هر آنچه در متغیر به نام first_nameوجود دارد ،نسخه ی چاپی ) (print outمی نامیم .پس از آن یک عالمت
به عالوه وجود دارد که با یک فاصله دنبال می شود .این فاصله بین عالمت های نقل قول احاطه شده است .به
این روش جاوا در می یابد که ما قصد چاپ یک کاراکتر فاصله ) (space characterرا داریم .پس از فاصله
گرچه این مسئله کمی گیج کننده به نظر می رسد ،اما ما فقط در حال چاپ یک نام ،یک فاصله و سپس نام
خانوادگی هستیم .پنجره ی برنامه نویسی شما باید مانند تصویر زیر به نظر برسد:
برنامه ی خود را اجرا کنید و پس از آن در پنجره ی Outputتصویر زیر مشاهده خواهید کرد:
اگر شما در حال ذخیره ی تنها یک کاراکتر مجزا هستید ،متغیر مورد نیاز شما ( charبا حرف کوچک) می باشد.
برای ذخیره ی کاراکتر از عالمت نقل قول )‘(به جای (“) استفاده می کنید .در اینجا مجددا برنامه را مشاهده
اگر سعی کنید یک متغیر charرا با عالمت نقل قول جفت (“) ذخیره کنیدNetBeans ،زیر کد ناسازگار با قرمز
خط خواهد کشید و خطای نوع ناسازگار )(incompatible typeارائه خواهد داد .به هرحال شما می توانید یک
متغیر Stringتنها با یک کاراکتر مجزا داشته باشید .اما به عالمت نقل قول دوگانه )“(نیاز دارید .بنابراین این
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
37
ورژن دوم دارای یک عالمت نقل قول مجزا می باشد ،در حالیکه مورد اول دارای عالمت نقل قول دوگانه (“) می
باشد.
موارد بیشتری در مورد stringها وجود دارد و بعدها مجددا آنها را مشاهده خواهید کرد .اکنون اجازه دهید
خاص کدهایی نوشته شده است .تمام آنچه باید انجام دهید ارجاع به کتابخانه ی مورد نظر و سپس فراخوانی
متد می باشد .گروه واقعا مفیدی که ورودی یک یوزر را کنترل می کند ،گروه Scannerنامیده می شود .این
گروه در کتابخانه ی java.utilیافت می شود .برای استفاده از گروه Scannerالزم است به آن گروه در کد خود
;import java.util.Scanner
;import java.util.Scanner
}
این عبارت به جاوا می گوید که می خواهید از یک گروه خاص در یک کتابخانه ی خاص استفاده کنید – گروه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
38
کار دیگری که باید انجام دهید ایجاد یک آبجکت از گروه Scannerمی باشد( .یک گروه در واقع دسته ای از
کدهاست .این کد تا زمانیکه یک آبجکت جدید از آن ایجاد نکنید ،کاری انجام نمی دهد).
برای ایجاد یک آبجکت Scannerجدید ،کد مورد نیاز را در زیر مشاهده می کنید:
بنابراین به جای متغیر intیا یک متغیر ، Stringدر حال تنظیم یک متغیر Scannerمی باشیم ،که مورد ما
user_inputنامیده می شود .پس از یک عالمت تساوی لغت کلیدی newرا داریم که برای ایجاد آبجکت های
جدید از یک گروه استفاده می شود .آبجکتی که در حال ایجاد آن هستیم از گروه Scannerمی باشد .در بین
برای گرفتن ورودی یوزر ،می توانید یکی از چندین متد موجود را در آبجکت جدید Scannerوارد عمل کنید.
یکی از این متدها nextنامیده می شود .این متد رشته ی بعدی متن را که یک یوزر روی صفحه کلید تایپ می
;String first_name
;) (first_name = user_input.next
بنابراین پس از آبجکت user_inputیک نقطه تایپ می کنیم .سپس لیستی از متدهای موجود مشاهده
خواهید کرد .روی nextدابل کلیک کنید و سپس در انتهای خط یک نقطه ویرگول تایپ کنید .برای به جلو بردن
;String first_name
;)" System.out.print("Enter your first name:
;) (first_name = user_input.next
دقت داشته باشید که مانند قبل از printبه جای printlnاستفاده می کنیم .تفاوت بین این دو این است که
printlnپس از خورجی مکان نما را به یک خط جدید حرکت می دهد ،اما printروی همان خط می ماند.
;String family_name
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
39
این همان کد است به جز اینکه اکنون جاوا هرآنچه را یوزر در قسمت متغیر family_nameبه جای متغیر
;String full_name
;full_name = first_name + " " + family_name
;)System.out.println("You are " + full_name
family_nameاست را ذخیره می کنیم .در بین این دو یک فاصله قرار می دهیم .خط آخر همه ی آن را در
بنابراین کد خود را طوری تطبیق دهید تا با تصویر بعدی هماهنگی داشته باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
40
برنامه ی خود را اجرا کنید تا اینکه پنجره ی Outputتصویر زیر را نمایش دهد:
اکنون جاوا متوقف شده تا اینکه در صفحه کلید چیزی وارد کنید ،و تا زمانیکه دکمه ی Enterصفحه کلید را
فشار ندهید ،پیشرفتی رخ نخواهد داد .بنابراین بعداز " "Enter your first name:را کلیک چپ کنید،
مشاهده خواهید کرد که مکان نمای شما محو خواهد شد .یک نام تایپ کنید و سپس دکمه ی enterرا فشار
دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
41
پس از فشردن دکمه ی ، enterجاوا هر آنچه را که در سمت چپ عالمت تساوی در متغیر نام تایپ و ذخیره
یک نام خانوادگی تایپ کرده و سپس مجددا دکمه ی Enterرا فشار دهید:
اکنون ورودی یوزر به پایان رسیده است و بقیه ی برنامه اجرا می شود .این خروجی هردو نام می باشد .نتیجه
بنابراین ما از گروه Scannerبرای گرفتن ورودی از یک یوزر استفاده می کنیم .هر آنچه تایپ شد در متغیرها
ذخیره شد .نتیجه نیز در پنجره ی Outputچاپ شد .در بخش بعدی نگاه کوتاهی به Option Panesخواهیم
داشت.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
42
گروه در کتابخانه ی javax.swingواقع شده است .گروه JOptionPaneبه شما اجازه می دهد تا جعبه های
اجازه بدهید کد خود را از the previous sectionتطبیق دهیم و چند گزینه ی پانل ) (option panesداشته
باشیم.
اولین کاری که باید انجام دهید مراجعه به کتابخانه ی مورد نظر است.
;import javax.swing.JOptionPane
این به شما می گوید که ما قصد استفاده از گروه JOptionPaneرا داریم که در کتابخانه ی javax.swing
اگر تمایلی به تطبیق کد قبل ندارید ،می توانید یک پروژه ی جدید برای این مورد آغاز کنید(.اکنون باید بدانید
که چگونه یک پروژه ی جدید ایجاد کنید .فقط به یاد داشته باشید که نام گروه را از Mainبه نام دیگری تغییر
دهید .ما قصد داریم که گروهی به نام InputBoxesداشته باشیم .نام پوشه ی ما userinputخواهد بود(.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
43
خط importرا به پروژه ی جدید خود وارد کرده و پنجره ی کد شما باید مشابه تصویر زیر باشد:
)علت وجود خطوط موجی این است که ما هنوز لز گروه JOptionPaneاستفاده نکرده ایم .زمانی که این کار را
برای به دست آوردن یک جعبه ی وردی که یوزر در آن تایپ کند ،می توانید از متد showInputDialogمربوط
به JOptionPaneاستفاده کنید .درست مانند آخرین بار ،ورودی را مجددا در متغیر نام ) (first nameذخیره
;String first_name
;)"first_name = JOptionPane.showInputDialog("First Name
به محض اینکه بعد از JOptionPaneیک نقطه تایپ کنید ،لیست زیر را مشاهده خواهید کرد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
44
روی showInputDialogدابل کلیک کنید .بین آکوالدهای ، showInputDialogپیغامی را تایپ کنید که می
خواهید در باالی تکست باکس نمایش داده شود .ما ""First nameرا تایپ کرده ایم .مانند تمام رشته ها
الزم است که این عبارت در داخل عالمت های نقل قول قرار بگیرد.
کد زیر را اضافه کنید که پس از آن می توانیم نام خانوادگی یوزر را دریافت کنیم:
;String family_name
;)"family_name = JOptionPane.showInputDialog("Family Name
;String full_name
;full_name = "You are " + first_name + " " + family_name
این بار ما از لیست showMessageDialogرا می خواهیم .بین آکوالدها ابتدا لغت nullرا مشاهده می کنیم.
این لغت ،لغت کلیدی جاوا می باشد که این پیغام ارتباطی با هیچ مورد دیگری در برنامه ندارد .پس از میرگول
(کاما) متنی است که می خواهیم در جعبه ی پیغام نمایش دهیم .کل کد شما باید مانند تصویر زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
45
;)System.exit(0
همانطور که از نامش پیداست ،اطمینان می دهد که برنامه خارج می شود .اما همچنین با حذف آبجکت های
اکنون کد خود را اجرا کنید ( .راه دیگری برای اجرای برنامه ی خود در ،NetBeansکلیک راست کردن بر روی هر
قسمتی از پنجره ی برنامه نویسی می باشد .از منوی ظاهر شده Run Fileرا انتخاب کنید(.
جعبه ی ورودی First Nameرا مشاهده خواهید کرد .چیزی در داخل آن تایپ کرده و سپس روی OKکلیک
کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
46
وقتی که جعبه ی ورودی Family Nameظاهر می شود ،یک نام خانوادگی تایپ کرده و روی okکلیک کنید:
جعبه های Inputو Messageبیشتر نیز فرمت می شوند .مورد زیر را برای جعبه های Inputخود امتحان کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
47
برای جعبه های Messagesخود مورد زیر را امتحان کنید (مورد شما باید روی یک خط قرار بگیرد:).
ERROR_MESSAGE
PLAIN_MESSAGE
QUESTION_MESSAGE
WARNING_MESSAGE
جعبه های Inputفقط برای متن استفاده نمی شوند :آنها اعداد را نیز می پذیرند .برنامه ای بنویسید که یوزر را
در دو برنامه،مساحت یک مستطیل و ارتفاع یک مستطیل ،به جلو می برد .از یک جعبه ی پیغام برای محاسبه ی
مساحت مستطیل استفاده کنید ( .به یاد داشته باشد که مستطیل حاصلضرب طول در عرض می باشد ).به
شنا باید از متغیر Stringبرای به دست آوردن اعداد خود از یوزر استفاده کنید:
;String breadth
;)"breadth = JOptionPane.showInputDialog("Rectangle Breadth
به هرحال نمی توانید دو رشته را با یکدیگر ضرب کنید .الزم است رشته ها را به اعداد صحیح تبدیل کنید .می
) Integer.parseInt( string_to_convert
بنابراین ابتدا Integerرا تایپ کرده و سپس یک نقطه تایپ کنید .بعد از آن ) ( parseIntرا تایپ کنید .بین
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
48
یک متغیر intبرای ناحیه تنظیم کنید .سپس می توانید روی همان خط ضرب کرده و اختصاص دهید؛
می توانید از هر نماد MESSAGEدیگری برای جعبه ی پیغام خود استفاده کنید.
اگر برای قاعده و ارتفاع مقادیر ممیزی شناور وارد کنید ،برنامه اجرا نخواهد شد .چگونه این مشکل را حل می
کنید؟
وقتی که تمرین باال را حل کنید ،آیا واقعا Integer.parseIntمی خواهید؟ فکر می کنید از چه موارد دیگری می
بسیار خوب ،ما ادامه خواهیم داد ،اجازه بدهید عبارات IFرا امتحان کنیم.
کد از باال به پایین اجرا می شود .این برنامه نویسی خطی می باشد که در آن هر خط با شروع از اولین خط و پایان
اما همیشه تمایل ندارید برنامه هایتان اینگونه اجرا شوند .اغلب تمایل دارید کدها تنها تحت شرایط خاص اجرا
شوند .برای مثال ممکن است بخواهید یک پیام در صورتی نمایش داده شود که یوزر کمتر از 18سال سن
داشته باشد و یا بالعکس پیام خاصی تنها در صورتی نمایش داده شود که یوزر بیشتر از 18سال سن داشته
باشد .شما می خواهید که جریان برنامه نویسی را برای خود کنترل کنید .این کار را می توانید با منطق شرطی
انجام دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
49
منطق شرطی اساسا در مورد لغت IFمی باشد :اگر یوزر کمتر از 18سال سن دارد این پیغام را نمایش دهید،
اگر یوزر بیشتر از بیشتر از 18سال سن دارد ،این پیغام را نمایش بده .خوشبختانه استفاده از منطق شرطی در
{ ) if ( Statement
}
عبارت را با لغت ( ifبا حروف کوچک) و یک جفت آکوالد شروع می کنید .این کد ،کدی می باشد که تنها زمانی
می خواهید اجرا کنید که شرایط شما برقرار باشد .شرایط مربوط در داخل آکوالدها قرار می گیرد:
این شرط به این معناست " اگر یوزر کمتر از 18سال سن دارد ".اما به جای عبارت کمتر از نشان ) < ( استفاده
کرده ایم .اگر یوزر کمتر از 18سال باشد ،می خواهیم که برنامه ای اجرا شود ،برای مثال پیغامی نمایش داده
شود:
//DISPLAY MESSAGE
}
اگر یوزر کمتر از 18سال نباشد ،پیغام بین آکوالدها اجرا نخواهد شد و برنامه به مسیر خود ،به سمت خطوط
پایین کد ،ادامه خواهد داد .هر آنچه در داخل آکوالدها تایپ می کنید ،تنها در صورتی اجرا خواهند شد که
قبل از امتحان این مورد ،نماد تندنویسی دیگر >می باشد ،این نماد به معنای بزرگتر از می باشد .عبارت IFدر
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
50
//DISPLAY MESSAGE
}
تنها مورد جدید در این کد نماد >می باشد .اکنون شرایط مربوط به یوزرهای باالتر از 18سال می باشد.
اما شرایط برای یوزرهایی با سن دقیقا 18سال درست نیست .اگر می خواهید شرایط در مورد افراد 18سال یا
باالی 18سال درست باشد ،می توانید از عبارت بزرگتر یا مساوی استفاده کنید .نمادها برای این شرایط بزرگتر
//DISPLAY MESSAGE
}
همچنین می توانید این شرایط را برای کوچکتر یا مساوی با به روش زیر چک کنید:
//DISPLAY MESSAGE
}
کد باال حاوی یک نماد ) < ( می باشد که با عالمت مساوی دنبال می شود.
یک پروژه ی جدید را با کلیک بر روی File > New Projectاز نوار منو در NetBeansآغاز کنید .شما می
توانید پوشه و گروه خود را با هر نامی که می خواهید نام گذاری کنید .کد زیر را وارد کنید ( نام پوشه ی ما
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
51
یک متغیر صحیح را تنظیم کرده ایم و مقداری برابر 17به آن اختصاص داده ایم .عبارت IFمورد " کمتر از 18
برنامه ی خود را اجرا کرده و آن را بررسی کنید . (NetBeansمعموال برنامه را در متن بولد شده در پنجره ی
Projectsاجرا می کند و نه آن کدی که شما نمایش داده اید .برای اجرای کد در پنجره ی codingدر قسمتی از
کد کلیک راست کنید .از منوی ظاهر شده Run Fileرا انتخاب کنید . ).تصویر زیر را در پنجره ی Outputباید
مشاهده کنید:
اکنون مقدار را برای متغیر یوزر از 17به 18تغییر دهید .برنامه ی خود را مجددا اجرا کنید .باید تصویر زیر را
مشاهده کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
52
بنابراین برنامه به خوبی و بدون پیغام خطا اجرا خواهد شد .اینجاست که چیزی چاپ نمی شود .دلیل آن این
است که کد پیغام بین آکوالدهای عبارت IFوجود دارد و عبارت IFدر حال بررسی مقادیر کمتر از 18می باشد.
اگر شرایط برقرار نباشد ،جاوا آکوالدها را کال نادیده گرفته و به کار خود ادامه می دهد.
تمرین :نماد "کوچکتر از یا مساوی با" را با جایگزین نماد کوچکتر از کنید .پیغام خود را طوری تغییر دهید تا با
مورد " یوزر 18سال یا کمتر از 18سال است" هماهنگ باشد .برنامه ی خود را مجددا اجرا کنید .آیا پیغام را
مشاهده می کنید؟ تمرین :مقدار یوزر را به 20تغییر دهید .برنامه ی خود را مجددا اجرا کنید .آیا هنوز پیغام را
مشاهده می کنید؟ شما می توانید بیشتر از یک عبارت IFدر کد خود داشته باشید .کد زیر را امتحان کنید:
این بار دو عبارت IFداریم .اولین عبارت مقادیر کمترا از یا برابر با 18را بررسی می کند .دومین عبارت مقادیر
بزرگتر از 18را بررسی می کند .وقتی که کد با مقداری از 18یا کمتر از 18برای نتغیر یوزر اجرا می شود ،خروجی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
53
تغییر مقدار متغیر یوزر به 20نیز نتیجه ی زیر را به دنبال خواهد داشت :بنابراین تنها یکی از عبارت های IF
خروجی خط چاپی خواهد داشت و تمام آن بستگی به مقدار متغیر یوزر دارد .در قسمت بعدی با Conditional
{ ) if ( condition_to_test
}
{ else
}
اولین خط با یک ifشروع می شود که پس از آن شرایطی قرار گرفته که قصد امتحان کردن آن را دارید .این
شرایط بین دو پرانتز قرار می گیرد .مجددا کروشه هایی برای مجزا کردن انتخاب های مختلف استفاده می شوند.
دومین انتخاب پس از لغت elseو بین کروشه های خود قرار می گیرد .در اینجا مجددا کدی را مشاهده می کنید
بنابراین در اینجا فقط دو انتخاب وجود دارد :یوزر 18سال یا کمتر از 18سال سن دارد ،یا اینکه بیشتر از 18
سال سن دارد .کد خود را طوری تنظیم کنید تا با تصویر باال هماهنگ بوده و آن را امتحان کنید .اولین پیغام
باید چاپ شود .اکنون مقدار متغیر مربوط به یوزر را به 20تغییر داده و کد را اجرا کنید .پیغام بین کروشه های
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
54
شما می توانید این را برای بیشتر از دو انتخاب چک کنید .برای مثال اگر بخواهیم دامنه ی سنی بیشتری ،مانند
19تا 39سال ،را بررسی کنیک ،چطور؟ برای بیشتر از دو انتخاب عبارت IF … ELSE IFاستفاده می شود.
{ ) if ( condition_one
}
{ ) else if ( condition_two
}
{ else
}
{ ) else if ( condition_two
}
بنابراین اولین IFبرای امتحان کردن شماره یک به کار می رود (به عنوان مثال 18و کمتر) .پس از آن else if
قرار می گیرد ،که با یک جفت آکوالد دنبال می شود .شرط دوم بین این دو پرانتز قرار می گیرد .هر موردی که با
دو شرط اول قرار نگیرد ،برای آخرین elseقرار خواهد گرفت .مجددا با استفاده از آکوالدها ،کد مجزا می شود،
به این شکل که هرelse if ، ifیا elseدارای آکوالدهای مخصوص خود می باشد .نادیده گرفتن یکی از آنها منجر
قبل از امتحام کردن کد جدید ،الزم است با چند اپراتور شرطی دیگر آشنا شوید .مواردی که تاکنون استفاده
> Greater Than < Less Than >= Greater Than or Equal To <= Less Than or Equal To
در اینجا چهار مورد دیگر را مشاهده می کنید که می توانید استفاده کنید:
اولین مورد دو نماد )& (ampersandمی باشد که برای امتحان کردن همزمان چند شرط استفاده می شود .از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
55
در اینجا بررسی می کنیم اگر یوزر بیشتر از 18سال و کمتر از 40سال سن دارد .به یاد داشته باشید که سعی
در بررسی موردی هستیم که در در داخل متغیر یوزر قرار دارد .شرط اول ) "Greater than 18" ( user > 18
(بیشتر از 18سال) می باشد و شرط دوم )( "Less than 40" ( user < 40کمتر از 40سال) است .بین این
دو اپراتور )&& ( ANDرا داریم .بنابراین تمام خط در حال بیان این عبارت است که " اگر یوزر کمتر از 18سال
و بیشتر از 40سال است." ("else if user is greater than 18 AND user is less than 40).
در یک لحظه وارد سه اپراتور شرطی دیگر خواهیم شد .اما در اینجا کد جدیدی را برای امتحان مشاهده می
کنید:
برنامه ی خود را اجرا کرده و آن را امتحان کنید .شما باید قبل از پرینت گرفتن بتوانید حدس بزنید که چه چیزی
چاپ می شود .از آنجایی مقدار مربوط به متغیر یوزر 21می باشد ،پیغامی بین آکوالدهای مربوط به else ifدر
مقدار مربوط به متغیر یوزر را از 21به 45تغییر دهید .اکنون پیغام مربوط به بخش elseاز کد باید نمایش
داده شود.
شما می توانید هر تعداد if partکه تمایل دارید ،اضافه کنید .فرض کنید قصد بررسی سن یوزر بین 45یا 50
را داریم .می توانیم از دو اپراتور شرطی باال استفاد کنیم .می توانیم چک کنیم اگر یوزر دارای مقدار 45یا مقدار
50می باشد:
برای بررسی متغیر مربوط به یوزر بر اساس مقدار مورد نظر شما ،از دو عالمت مساوی بدون هیچ فاصله ای بین
آنها استفاده کنید .جاوا بررسی را برای همان مقدار و نه مقدار دیگر انجام خواهد داد .از آنجایی که قصد
بررسی سن یوزر 50ساله را هم داریم ،می توانیم شرایط دیگری در همان پرانتزها داشته باشیم == : user
50.این عبارت در واقع بیان می کند که " بررسی کنید اگر یوزر دارای متغیری با مقدار 50می باشد ".در بین
این دو شرایط اپراتور ORوجود دارد .اینها دو کاراکتر pipeمی باشند که روی صفحه کلید ( UKانگلیسی) در
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
56
سمت چپ حرف zقرار دارند .مجددا فاصله ای بین آنها وجود ندارد .تمام خط باال بیانگر این عبارت است که "
آن را برای خود امتحان کنید .مقدار متغیر یوزر را به 45تغییر داده و کد خود را اجرا کنید .سپس آن را به 50
تغییر داده و مجددا کد را اجرا کنید .در هر دو مورد پیغام جدیدی باید نمایش داده شود.
اپراتورهای شرطی مختلفی با ترفندهای گوناگون مورد استفاده قرار می گیرند .اما شما فقط یک متغیر را برای
یک شرایط خاص امتحان می کنید .این درواقع مربوط می شود به انتخاب اپراتور شرطی درست یا اپراتورهایی
ELSE IFنیز استفاده می شود Nesting ).به معنای قرار دادن یک IF Statementدر داخل یک عبارت دیگر
می باشد .به عنوان مثال فرض کنید قصد بررسی سن فردی کمتر از 18و بیشتر از 16سال را دارید .می
خواهید که برای بیشتر از 16ساله ها یک پیغام متفاوت نمایش دهید .با اولین عبارت IFآغاز کنید.
برای بررسی بیشتر از 16سال ،می توانید یک عبارت IFدوم در داخل عبارتی که دارید ،قرار دهید .فرمت
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
57
بنابراین اولین عبارت متغیر یوزر را اگر از 19کمتر باشد ،دریافت می کند.دومین عبارت حتی متغیر یوزر را
محدودتر می کند ،بین 16تا .19برای چاپ پیغام های مختلف ،می توانید به جای عبارت IFباال یک عبارت IF
به محل همه ی کروشه ها دقت کنید :اگر یک مورد اشتباه باشد ،برنامه ی شما اجرا نخواهد شد . Nested IF
Statementمی توانند کمی گیج کننده باشند ،اما تمام کاری که سعی در انجام آن دارید ،محدود کردن انتخاب
ها می باشد.
بنابراین به جای تایپ کردن intیا doubleیا ، stringفقط کافیست Booleanتایپ کنید( با bکوچک ).پس
از نام متغیر خود می توانید یک مقدار trueیا falseاختصاص دهید .دقت کنید که اپراتور مربوط به اختصاص
دادن یک عالمت تساوی ( = ) می باشد .اگر می خواهید بررسی کنید که یک متغیر مقداری از چیزی را دارد بخ
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
58
;)"System.out.println("it's true
}
{ else
;)"System.out.println("it's false
}
بنابراین اولیت عبارت IFمتغیر یوزر را بررسی می کند ،اگر یک مقدار trueداشته باشد .بخش دیگر false
بودن آن را بررسی می کند .نیازی به عبارت ")"else if ( user = = falseندارید .در انتها اگر اگر چیزی true
نباشد پس falseمی باشد .بنابراین می توانید از بخش دیگر استفاده کنید :تنها دو انتخاب با مقادیر
Booleanوجود دارد.
تنها اپراتور شرطی ما در لیست اپراتور NOTمی باشد .شما می توانید از این اپراتور با مقادیر Boolean
{ ) if ( !user
;)"System.out.println("it's flase
}
{ else
;)"System.out.println("it's true
}
{ ) if ( !user
این بار قبل از متغیر یوزر اپراتور NOTرا داریم .اپراتور NOTیک عالمت تعجب ( ! ) می باشد و قبل از متغیری
قرار می گیرد که سعی در امتحان کردن آن دارید .این اپراتور negationرا امتحان می کند که به معنای امتحان
کردن متضاد مقدار حقیقی می باشد .از آنجایی که متغیر یوزر بر روی trueتنظیم شده است!user ،مقادیر
falseرا امتحان خواهد کرد .اگر یوزر بر روی falseتنظیم شده بود!user ،مقادیر trueرا امتحان می کرد.
اینطور فکر کنید :اگر چیزی trueنیست پس چه می تواند باشد؟ یا اگر falseنیست پس چیست؟
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
59
گزینه ی تست دامنه ای از مقادیر را برای متغیرهایتان ارائه می دهد .این عبارت می تواند به جای عبارت بلند و
پیچیده ی if … else ifاستفاده شود .ساختر عبارت switchمانند زیر می باشد:
{ ) switch ( variable_to_test
case value:
;code_here
;break
case value:
;code_here
;break
default:
;values_not_caught_above
}
بنابراین شما با لغت switchشروع کرده اید که با یک جفت آکوالد دنبال می شود .تمام دیگر بخش های این
عبارت در بین آکوالدها قرار می گیرند .متغیری که می خواهید چک کنید بین آکوالدهای switchقرار می گیرد.
بنابراین شما یک جفت آکوالد دارید .بخش های دیگر عبارت switchنیز بین دو آکوالد قرار می گیرد .برای هر
مقداری که می خواهید چک کنید نیاز به لغت caseدارید .سپس مقداری را دارید که قصد بررسی آن را دارید:
case value
پس از case value:دو نقطه قرار می گیرد .سپس اگر مقدار هماهنگ باشد ،آن چیزی را قرار می دهید که
تمایل دارید اتفاق بیفتد .این کد شماست که می خواهید اجرا شود .برای گریز از هر مورد در عبارت، switch
مقدار پیش فرض در انتها انتخابی می باشد .اگر مقادیر دیگری وجود دارند که می توانند در متغیر شما قرار
بگیرند اما شما برای جای دیگری در عبارت switchامتحان نکرده اید ،این مقادیر می تواننید شامل شوند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
60
اگر همه ی آن گیج کننده می با شد در اینجا کد دیگری را مشاهده می کنید .می توانید برای این یا یک پروژه ی
جدید ایجاد کنید و یا اینکه فقط روی کدی که دارید کامنت بدهید .یک راه سریع برای کامنت گذاشتن بر روی
کد در NetBeansاز نوار ابزار در باال می باشد .ابتدا کدی را که می خواهید کامنت بگذارید مشخص کنید.
اولیین کاری که کد انجام می دهد تنظیم مقداری برای امتحان کردن می باشد .مجددا ما یک متغیر صحیح را
تنظیم کرده و آن را userمی نامیم .مقدار را بر روی 18تنظیم کرده ایم .عبارت switchمتغیر یوزر را چک کرده
و آنچه در آن است را مشاهده خواهد کرد .سپس از طریق هر یک از عبارات مورد وارد خواهد شد .وقتی موردی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
61
را پیدا می کند که هماهنگ می باشد ،متوقف خواهد شد و کد را برای آن مورد اجرا خواهد کرد .سپس از عبارت
برنامه را امتحان کنید .مقادیر مختلفی برای متغیر یوزر وارد کرده و نتیجه را مشاهده کنید.
متاسفانه نمی توانید برای دامنه ای از مقادیر بعد از مورد امتحان کنید و تنها برای یک مقدار میسر می باشد.
بنابراین خط باال دامنه ی مقادیر را از 1تا 4تست می کند .اما شما باید هر مقدار را " "spell outکنید ( .دقت
در اتمام این بخش در مورد منطق شرطی ،تمرین های زیر را امتحان کنید:
برنامه ای بنویسید که ورودی یوزر را از consoleقبول می کند .برنامه ها باید یک عدد گرفته و سپس
محدوده های سنی زیر را امتحان کنید 0 :تا 11 ،10تا 21 ،20تا 30 ،30و بیشتر .یک پیغام در پنجره ی
بنابراین اگر یوزر 27را به عنوان سن وارد کند ،پنجره ی Outputمانند زیر خواهد بود:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
62
اگر یوزر 30یا بیشتر از 30باشد ،فقط می توانید پیغام زیر را نمایش دهید:
اما متد ) ( nextبرای رشته ها استفاده می شود .سنی که از یوزر دریافت می کنید باید یک عدد صحیح باشد،
اگر می خواهید چک کنید که یک رشته مشابه رشته ی دیگر می باشد ،می توانید از متودی به نام equals
استفاده کنید.
در کد باال یک متغیر Stringرا تنظیم کرده و آن را user_nameنامیده ایم .سپس مقدار " "Billبه آن
اختصاص داده ایم .بین آکوالدهای ، IFمجددا نام متغیر داریم که با یک نقطه دنبال می شود .پس از این نقطه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
63
لغت " "equalsقرار می گیرد .بین یک جفت آکوالد دیگر رشته ای را تایپ می کنید که سعی در امتحان آن
دارید.
نکته :در هنگام بررسی اگر یک رشته همانند رشته ی دیگر می باشد ،این دو رشته باید دقیقا هماهنگ باشند.
بنابراین ""Billبا ""billمتفاوت می باشد .مورد اول دارای Bبزرگ و مورد دوم دارای bکوچک می باشد.
برای این تمرین برنامه ای بنویسید که از یک یوزر می خواهد تا از بین چهار رنگ انتخاب کند :سیاه ،سفید ،قرمز
یا آبی .بسته به رنگ انتخاب شده ،از عبارت های IF … ELSE IFبرای نمایش یکی از پیغام های زیراستفاده
کنید:
" BLACKشما باید یک Gothباشید" ." WHITEشما یک فرد پاک هستید " ." REDشما یک شخص سرگرم
کننده و برون گرا هستید " . " BLUEشما طرفدار چلسی هستید ،اینطور نیست؟ "
وقتی برنامه ی شما به پایان می رسد ،پنجره ی Outputباید شبیه به تصویر زیر باشد:
بسیار خوب ،اجازه بدهید ادامه داده و نگاهی به loopداشته باشیم .در بخش بعد سرعت را کمی باال می
بریم.
باشد .این به این معناست که جریان صعودی می باشد ،از باال به پایین ،با هر خط از کد که اجرا شده است ،مگر
در بخش قبل مشاهده کردید که یک روش برای اینکه به جاوا بگویید هر خط از کد را اجرا نکند ،استفاده از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
64
راه دیگر برای به هم ریختن جریان از باال به پایین ،استفاده از loopها می باشد .یک برنامه نویسی loopآن
برنامه نویسی می باشد که مجددا به عقب بازمی گردد .اگر بازگشت مجدد به عقب اجبار باشد ،شما می توانید
به عنوان یک مثال فرض کنید که می خواهید اعداد از یک تا 10را با هم جمع کنید .شما این کار را در جاوا به
عوض می توانید از loopاستفاده کنید تا مکررا وارد خطوط کد شوید تا اینکه به 1000برسید .سپس می
Loopsمعنای خود را از دست داده باشد .اما می توانید آن را به این شکل در نظر بگیرید : loopبرای یک
//YOUR_CODE_HERE
}
بنابراین بعد از لغت forبا حروف کوچک ،یک جفت آکوالد دارید .در داخل این آکوالدها سه چیز الزم می باشد:
مقدار آغازین برای ، loopمقدار پایانی برای ، loopو روشی برای به دست آوردن یک تعداد به تعداد دیگر .این
فرایند افزایش عدد ) (increment numberنامیده می شود و معموال 1می باشد .اما الزم نیست اینطور
باشد .اگر تمایل داشته باشید می توانید تا تعداد 10نیز باال بروید.
بعد از پرانتزها نیاز به یک جفت آکوالد دارید .آکوالدها برای جداسازی آن بخشی از کد استفاده می شوند که می
خواهید به طور مکرر اجرا شود .یک مثال می تواند این مورد را شفاف سازد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
65
برای این مورد یک پروژه ی جدید آغاز کنید .پروژه و گروه را می توانید به دلخواه خود نامگذاری کنید( .ما پروزه
ما کار را با تنظیم یک مقدار صحیح آغاز کردیم که loopValنامیده ایم .خط بعدی یک متغیر صحیح دیگر را
تنظیم می کند .این متغیر برای مقدار نهایی loopاستفاده می شود و به 11تنظیم شده است .آنچه ما تصمیم
اولین قسمت به جاوا می گوید که در چه شماره ای loopingرا آغاز کنید .در اینجا ما یک مقدار صفر را به
متغیر loopValاختصاص می دهیم .این اولین عدد در loopمی باشد .بخش بعد از برخی منطق های شرطی
استفاده می کند:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
66
این عبارت می گوید که loopValکمتر از end_valueباشد . for loopبه چرخش خود ادامه خواهد داد در حالیکه مقدار
داخل متغیر loopValکمتر از متغیری به نام end_valueمی باشد .تا زمانیکه کمتر بودن loopValاز end_value
درست باشد ،جاوا loopingرا روی کد در بین آکوالدها حفظ خواهد کرد.
loopVal++
آنچه در اینجا انجام می دهیم این است که به جاوا می گوییم چگونه از مقدار آغازین در loopValبه عدد بعدی در ترتیب
حرکت کند .می خواهیم از 0تا 10بشمریم .عدد بعد از 0عدد 1می باشد . loopVal++راه کوتاه بیان عبارت "افزودن 1
به مقدار در متغیر" می باشد.
در سمت راست عالمت تساوی loopVal + 1را داریم .بنابراین جاوا 1را به هر چیزی که در متغیر loopVal
ذخیره شده ،اضافه می کند .زمانی که 1را به مقدار اضافه کرده است ،نتیجه را در داخل متغیر در سمت چپ
تساوی ذخیره خواهد کرد .این مجددا متغیر loopValمی باشد .نتیجه این است که افزوده شدن 1به
loopValادامه می یابد .این فرایند افزایش متغیر نامیده می شود .نماد تندنویسی متغیر ++بسیار متداول
می باشد:
وقتی که کد باال اجرا شود ،مقدار some_numberمقدار 1خواهد بود .این راه کوتاه بیان زیر می باشد:
برای پوشاندن آنfor loop ،در حال بیان مورد زیر می باشد:
: Loop Start value: 0 Keep Looping Whileمقدار آغازین کمتر از 11می باشد How to advance to
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
67
هر چیزی که در داخل متغیر loopValمی باشد ،همراه با متن چاپ خواهد شد:
بنابراین برنامه را در یک loopگیر انداخته ایم و آن را مجبور کرده ایم به طور مکرر اجرا شود .با هر اجرای loop
مقدار 1به loopValاضافه می شود . loopبه چرخش خود ادامه خواهد داد ،در حالیکه مقدار در داخل
loopValکمتر از مقدار در داخل end_valueمی باشد .هر چیزی که در داخل آکوالدهای loopمی باشد کدی
است که پشت سر هم اجرا خواهد شد .و این تمام نکنه ی loopمی باشد :اجرای کد آکوالد به طور پیوسته.
ئر اینجا کدی را می بینید که اعداد را از 1تا 10به هم اضافه می کند .آن را امتحان کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
68
پاسخی که در پنجره ی Outputدریافت می کنید 55می باشد .کد نیز کم و بیش همان کد مربوط به loop
قبلی می باشد .ما همان دو متغیر loopValو end_valueرا تنظیم شده در باال داریم .همچنین یک متغیر
صحیح سومی هم داریم که additionنامیده می شود .این مقدار مجموع 1تا 10را حفظ خواهد کرد.
بین پرانتزهای for loopتقریبا همان مقدار آخرین بار می باشد :ما در حال loopingهستیم در حالیکه
loopValکمتر از end_valueمی باشد؛ و در حال افزودن 1به متغیر loopValمی باشیم .تنها تفاوت این
این خط مجزا اعداد 1تا 10را با هم جمع می کند .اگر در مورد چگونگی کار کردن آن گیج شده اید ،از سمت
;addition + loopVal
اولین اجرای ، loopمتغیر additionمقدار 0را در خود حفظ می کند .در این حین متغیر loopValمقدار 1را در
خود دارد .جاوا 0را به 1اضافه خواهد کرد .سپس نتیجه را در متغیر سمت چپ عالمت تساوی ذخیره خواهد
کرد .مجددا این متغیر ( additionمجموع) می باشد .هرآنچه از قبل در متغیر additionحفظ شد ) ،(0پاک
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
69
واضح است که پاسخ 2+1عدد 3می شود .بنابراین 3مقدار جدیدی است که در سمت چپ تساوی ذخیره
خواهد شد.
جاوا 3را با 3جمع خواهد کرد و 6را در سمت چپ تساوی ها ذخیره می کند .این چرخش ادامه می یابد تا اینکه
(دقت داشته باشید که بعد از آخرین آکوالد از ، loopخط چاپی ما خارج از for loopمی باشد ).
تمرین
کد خود را طوری تغییر دهید که جاوا اعداد را از 1تا 100اضافه کند .پاسخی که در یافت می کنید 5050می
باشد .تمرین :یک برنامه ی جدول زمانبندی بنویسید .برنامه باید از یوزر بخواهد تا یک عدد را وارد کند.
سپس این عدد به عنوان دفعات مربوط به جدول استفاده خواهد شد .بنابراین اگر یوزر عدد 10را وارد کند،
for loopشما فقط به دو خط کد بین آکوالدها نیاز دارد و یکی از آنها خط چاپ ) (print lineمی باشد .شما تنها
به یک خط مجزا نیاز دارید تا پاسخ های جدول خود را محاسبه کنید .تقریبا باید چگونگی گرفتن عدد از یوزر را
بدانید .این کار در آکوالدهای loopاستفاده می شود تا پاسخ به ضرب شما را انجام دهد .جول شما تنها نیاز به
رفتن از 1تا 10را دارد .تمرین از for loopبرای چاپ اعداد فرد از 1تا 10استفاده کنید ( .برای انجام آسان
این تمرین در مورد افزایش مقدار loopفکر کنید که سومین آیتم بین پرانتزها می باشد ).یکی از راه های
سخت انجام تمرین باال استفاده از اپراتوری است که هنوز با آن آشنایی ندارید – اپراتور modulus.این اپراتور
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
70
زمانی استفاده می شود که یک عدد را تقسم کرده و باقیمانده را نگاه می دارید .بنابراین Mod 3 10عدد 1
می باشد ،زیرا 10تقسیم بر 3می شود .3باقیمانده نیز 1می باشد که آن را حفظ می کنید .اپراتور Modulus
در جاوا نماد درصد می باشد که تا حدی گیج کننده است .مانند زیر:
;int remainder
int total = 10
remainder = total %3
بنابراین عددی را که می خواهید تقسیم کنید در ابتدا قرار می گیرد .سپس یک نماد درصد تایپ می کنید که
در تمرین باال می توانستید از 2به عنوان عدد Modاستفاده کنید و سپس از عبارت IFدر for loopبرای
امتحان باقیمانده استفاده کنید( .آیا متوجه می شوید که چرا 2باید عدد Modباشد؟)
نوع دیگری از loopکه می توانید در جاوا استفاده کنید While loopمی باشد .درک While loopها بسیار
راحت تر از for loopمی باشد .در اینجا مشاهده می کنید که چگونه به نظر می رسند:
{ ) while ( condition
}
بنابراین با لغت whileبا حروف کوچک ،آغاز می کنید .شرایطی را که می خواهید امتحان کنید بین پرانتز قرار می
گیرد .یک جفت آکوالد نیز پس از آن قرار می گیرد و کدی را که می خواهید اجرا کنید بین آکوالدها قرار می
گیرد .به عنوان مثال در اینجا یک while loopرا مشاهده می کنید که متنی را چاپ می کند:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
71
شرایط مورد امتحان بین پرانتزها قرار گرفته است .ما می خواهیم در حالیکه متغیری به نام loopValکمتر از 5
می باشد looping ،را ادامه دهیم .کد ما ابتدا در داخل آکوالدها یک خط از متن را چاپ می کند .سپس نیاز به
افزایش متغیر loopValداریم .اگر این کار را انجام ندهیم یک loopنامحدود خواهیم داشت ،همانطور که
گرچه ما از یک شمارنده استفاده کرده ایم تا به شرایط نهایی برسیم ،در حالیکه loopها به بهترین شکل
است فاده می شوند وقتی که شما واقعا نیازی به محاسبه ی مقدار ندارید ،اما در عوض فقط در حال بررسی مقدار
می باشد .برای مثال هنگامی که هیچ کدام از کلیدهای صفحه کلید استفاده نمی شوند ،می توانید loopingرا
ادامه دهید .این مورد در بازیها متداول می باشد .برای خروج از while loopو همچنین خود بازی ،می توان از
حرف " "Xاستفاده کرد .مثال دیگر loopingدور یک فایل متنی می باشد ،در حالیکه هنوز انتهای فایل نرسیده
است.
مجددا جاوا آنقدر loopرا می چرخاند تا به شرایط نهایی برسد .این بار بخش " "whileدر قسمت پایین قرار
دارد .اما شرایط همان است – loopingانجام شود ،در حالیکه مقدار داخل متغیر loopValکمتر از می باشد.
تفاوت بین این دو کد بین آکوالدهای do … whileاست که نهایتا یک بار اجرا خواهد شد .با while loop
شرایط حاصل خواهد شد .سپس جاوا از loopشما آزاد خواهد شد و حتی کد داخل آکوالد را اجرا نخواهد کرد.
برای امتحان این مورد ،ابتدا while loopرا امتحان کنید .مقدار متغیر loopValرا به تغییر داده و سپس کد را
اجرا کنید .باید متوجه شوید که متن چاپ نشده است .اکنون انجام loopرا با مقدار 5برای loopValامتحان
کنید .متن یک بار چاپ خواهد شد و سپس جاوا از loopآزاد خواهد شد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
72
بسیار خوب ،در اینجا loopingرا رها می کنیم .این موضوعی می باشد که نیاز است بیشتر به آن بپردازید .اما
اگر هنوز در این موضوع کامل نیستید ،نگران نباشید – در ادامه بیشتر فرا خواهید گرفت .در بخش بعدی
باشد .در این بخش در مورد arrayها و چگونگی استفاده از آنها فراخواهید گرفت.
یک Arrayچیست؟
تاکنون با متغیرهایی کار کردید که فقط یک مقدار را در خود حفظ می کنند .متغیرهای صحیح که تنظیم کرده
اید ،فقط یک عدد را حفظ می کنند و متغیرهای رشته نیز فقط یک رشته از متن را در خود دارند .یک array
(ردیف) روشی برای حفظ بیشتر از یک مقدار در یک زمان می باشد که در واقع شبیه لیستی از آیتم ها می
باشد .یک arrayرا می توان به عنوان ستون هایی در یک صفحه ی گسترده در نظر گرفت .شما می توانید یک
صفحه ی گسترئه تنها با یک ستون و یا تعداد زیادی ستون داشته باشید .داده ای که در یک ردیف مجزا حفظ
مانند یک صفحه ی گستردهarray ،ها برای هر ردیف دارای یک موقعیت عددی می باشند .این موقعیت ها در
یک arrayاز شروع شده و متداوال افزایش می یابند .هر موقعیت نیز در یک arrayمی تواند یک مقدار در خود
حفظ کند .در تصویر باال موقعیت 0دارای مقدار 10و موقعیت 1دارای ،14موقیت 2دارای مقدار 36و غیره می
باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
73
برای برقراری یک arrayاز اعداد ،مشابه تصویر باال ،باید به جاوا اعالم کنید که چه نوع داده ای قرار است وارد
arrayشود ( اعداد صحیح ،رشته ها ،مقادیر Booleanو غیره) .سپس الزم است که اعالم کنید که array
;int[ ] aryNums
تنها تفاوت بین برقراری یک متغیر عدد صحیح طبیعی و یک arrayیک جفت کروشه ای است که بعد از نوع داده
قرار می گیرد .کروشه ها برای اعالم به جاوا در مورد این که شما قصد برقراری یک arrayرا دارید ،کافی
هستند .نام arrayمربوط به تصویر باال aryNumsمی باشد .درست مانند متغیرهای طبیعی ،می توانید آنها را
هر چیزی که می خواهید نام گذاری کنید ( با همان استثنائاتی که قبال ذکر کردیم).
اما این مورد فقط به جاوا می گوید که شما قصد تنظیم یک arrayعدد صحیح را دارید .این برنامه تعداد
موقعیت هایی را که arrayباید حفظ کند ،اعالم نمی کند .برای انجام این کار باید یک array objectجدید
تنظیم کنید:
شما با نام arrayشروع کرده اید که با عالمت تساوی دنبال می شود .پس از عالمت تساوی به لغت کلیدی
newو سپس مجددا نوع داده ی خود ،نیاز دارید.پس از نوع داده یک جفت کروشه قرار می گیرد .بین کروشه
ها نیاز به اندازه ی arrayدارید .اندازه در واقع تعداد موقعیت هایی است که arrayباید حفظ کند.
اگر تمایل دارید ،می توانید همه ی آنها را روی یک قرار دهید:
بنابراین ما به جاوا اعالم می کنیم که یک arrayرا با 6موقعیت در آن تنظیم کند .پس از اجرای این خط ،جاوا
مقادیر پیش فرض را برای arrayاختصاص خواهد داد .از آنجایی که ما یک arrayمقدار صحیح تنظیم کرده
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
74
برای اینکه در یک arrayمقادیر را به موقعیت های مختلف اختصاص دهید ،این کار را به یک روش طبیعی انجام
می دهید:
;aryNums[0] = 10
در اینجا مقدار 10به موقعیت 0در یک arrayبه نام aryNumsاختصاص داده می شود .مجددا کروشه ها
برای اشاره به هر موقعیت استفاده می شوند .اگر بخواهید مقدار 14را به یک arrayبا موقعیت 1اختصاص
;aryNums[1] = 14
;aryNums[2] = 36
فراموش نکنید که از آنجایی که arrayها از 0شروع می شوند ،سومین موقعیت در یک arrayدارای عدد
اگر بدانید که چه مقادیری قرار است در یک arrayقرار گیرند ،می توانید آنها را مانند زیر تنظیم کنید:
این متد در حال تنظیم یک arrayبا استفاده از کروشه ها بعد از عالمت تساوی ،می باشد.در بین کروشه ها
مقادیری را تایپ می کنید که arrayخواهد گرفت .اولین مقدار در موقعیت 0و دومین مقدار در موقعیت 1و
غیره خواهد بود .توجه داشته باشید که هنوز پس از intنیاز به کروشه دارید ،اما نیازی به لغت کلیدی newیا
تکرار نوع داده و یا کروشه ها ندارید .اما این فقط مربوط می شود به نوع داده های مقادیر ، intرشته و مقادیر
char.به عبارت دیگر نیاز به لغت کلیدی newدارید .بنابراین می توانید این کار را انجام دهید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
75
برای به دست آوردن مقادیر مربوط به ، arrayنام arrayرا تایپ کنید که با موقعیت arrayدر یک کروشه
کد باال هر مقداری که در ردیفی با موقعت 2در یک arrayبه نام aryNumsباشد را چاپ می کند .اما اجازه
یک پروژه ی جدید آغاز کرده و آن را به میل خود نامگذاری کنید .فراموش نکنید که نام گروه را به یک مورد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
76
وقتی برنامه را اجرا می کنید باید تصویر زیر را در پنجره ی Outputمشاهده کنید:
موقعیت عددی arrayرا در print lineاز 2به 5تغییر دهید و در عوض 18باید چاپ شود .در بخش بعدی
Arrayها با loopها در جای خود می آیند .در the previous section thatمشاهده کردید که برای اختصاص
;aryNums[0] = 10
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
77
اما اگر اعداد زیادی برای اختصاص دادن به یک arrayدارید ،این کار اصال عملی نمی باشد .به عنوان مثال یک
برنامه ی قرعه کشی را در نظر بگیرید که باید اعداد 1تا 49را به موقعیت های یک arrayاختصاص دهد .به
جای تایپ یک لیست طوالنی از موقعیت ها و مقادیر ، arrayمی توانید از یک loopاستفاده کنید .در اینجا
بنابراین یک arrayتنظیم می کنیم تا 49مقدار صحیح را در خود حفظ کند .سپس کد loopقرار می گیرد .به
Lengthیک پراپرتی از آبجکت های arrayمی باشد که می توانید برای به دست آوردن اندازه ی arrayاز آن
استفاده کنید ( تعداد موقعیت هایی که دارد. ).بنابراین ،زمانی که مقدار در متغیر iکمتر از اندازه ی arrayمی
برای اختصاص دادن مقادیر به موقعیت ها در ، arrayمی توان از خط زیر استفاده کرد:
;lottery_numbers[i] = i + 1
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
78
به جای مقدار hard-codeبین کروشه های مربوط به نام ، arrayمتغیری به نام iداریم .به یاد داشته باشید
که این متغیر هر بار با چرخش loopیک واحد افزایش می یابد .بنابراین هر موقعیت فقط با استفاده از مقدار
loopقابل دسترسی می باشد .مقداری که به هر موقعیت اختصاص داده شده i + 1می باشد .بنابراین مجددا
مقدار افزایش یافته ی loopرا داریم ،این بار با یک واحد افزوده به آن .از آنجایی که مقدار loopاز 0شروع
می شود ،این برنامه اعداد 1تا 49را به شما ارائه خواهد داد.
خط دیگر در loopتنها مقداری را که در هر موقعیت قرار دارد ،چاپ می کند ( .اگر تمایل داشتید می توانید
کدی بنویسید که اعداد را در یک arrayقرار دهید .زمانی که مقادیر را در یک ردیف قرار دادید می توانید از 6
عدد اول به عنوان شماره های قرعه کشی استفاده کنید .از کد دیگری استفاده کنید برای مقایسه ی 6شماره
ی یک یوزر با شماره های برنده ،اکنون یک برنامه ی قرعه کشی در اختیار دارید).
در بخش بعدی چگونگی مرتب سازی arrayها را مشاهده خواهید کرد.
مرتب سازی arrayها ،ابتدا نیاز به مراجعه به یک کتابخانه ی جاوا به نام Arraysدارید .شما این کار را با
عبارت importانجام می دهید .می توانید آن را با your aryNums programmeامتحان کنید .عبارت
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
79
;import java.util.Arrays
اکنون که کتابخانه ی Arraysرا وارد کرده اید ،می توانید از متود مرتب سازی استفاده کنید .این کار بسیار
ساده می باشد.
ابتدا لغت Arrayرا تایپ کرده و سپس یک نقطه تایپ کنید .به محض اینکه نقطه را تایپ کردید،
NetBeansلیستی از مواردی را نمایش خواهد داد که می توانید با arrayها انجام دهید .لغت " "sortرا تایپ
کنید .سپس نام ردیف مورد نظر را که می خواهید مرتب کنید ،بین یک جفت پرانتز قرار دهید ( .توجه کنید که
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
80
و این برای مرتب سازی arrayکافی نمی باشد؛ در اینجا کدی را مشاهده می کنید که می توانید امتحان کنید:
چرخش for loopدر انتها ادامه پیدا می کند تا اینکه مقادیر را در هر موقعیت چاپ کند .وقتی کد اجرا می
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
81
به هرحال مرتب سازی با ترتیب نزولی فقط با نوشتن کد مرتب سازی خودتان یا تغییر arrayبه آبجکت های
صحیح ) ( Integer objectsو سپس وارد کردن از کتابخانه ی Collectionsامکان پذیر می باشد .اگر نیاز به
یک مرتب سازی نزولی داشته باشید ،در اینجا کدی را مشاهده می کنید که فقط این کار را انجام می دهد ( اگر
شما می توانید رشته هایی از متن را در داخل arrayها قرار دهید .این کار درست به روش اعداد صحیح انجام
می شود:
کد باال یک رشته arrayرا با 5موقعیت تنظیم می کند .سپس متن به هر موقعیت در arrayاختصاص داده می
شود.
در اینجا یک loopرا مشاهده می کنید که در همه ی موقعیت های arrayقرار گرفته و هر چیزی را که در
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
82
;int i
{ ) for ( i=0; i < aryString.length; i++
;) ]System.out.println( aryString[i
}
هنگامی که مقدار متغیری بع نام Iکمتر از طول arrayبه نام aryStringباشدloop ،به چرخش خود ادامه می
دهد.
وقتی که برنامه ی باال اجرا می شود ،پنجره ی Outputبه شکل زیر خواهد بود:
شما می توانید یک مرتب سازی روی رشته ی arrayها اجرا کنید ،درست مانند کاری که می توانید با اعداد
صحیح انجام دهید .اما مزتب سازی یک ترتیب صعودی براساس حروف الفبا می باشد ،به این معنا که aaقبل
از abقرار می گیرد .به هرحال جاوا برای مقایسه ی یک حرف در رشته ی شما با یک رشته ی دیگر از کاراکترهای
یونیکد ) (Unicodeاستفاده می کند .این به این معناست که حروف بزرگ قبل از حروف کوچک قرار می گیرند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
83
وقتی که برنامه اجرا می شود ،پنجره ی Outputتصویر زیر را نمایش خواهد داد:
گرچه ما arrayرا مرتب کرده ایم ،اما لغت Thisدر ابتدا قرار می گیرد .اگر یک مرتب سازی الفبایی باشد ،انتظار
دارید که لغت aدر ابتدا قرار بگیرد .این اتفاق می افتد اگر تمام حروف کوچک باشند .در کد برنامه نویسی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
84
خود Tبزرگ از لغت Thisرا به tکوچک تغییر دهید .اکنون برنامه را مجددا اجرا کنید .پنجره ی Outputبه
همانطور که مشاهده می کنید ،لغت thisاکنون در پایین قرار دارد .در بخش بعد نگاه دقیق تری به رشته ها
خواهیم داشت .بنابراین اکنون زیاد نگران این مورد نباشید .در عوض تمرین های زیر را بررسی کنید.
تمرین :یک arrayرا تنظیم کنید تا مقادیر زیر را در خود داشته باشد : 23, 6, 47, 35, 2, 14.برنامه ای
بنویسید تا میانگین این 6عدد را به دست آورید ( .می توانید ار اعداد صحیح برای این تمرین استفاده کنید
که پاسخ شما را گرد خواهد کرد ) .تمرین :با استفاده از مقادیر باال ،می توانید کاری کنید که برنامه ی شما
باالترین عدد را در arrayچاپ کند .تمرین :با استفاده از همان arrayدر باال می توانید کاری کنید که برنامه ی
شما فقط اعداد فرد را چاپ کند .در بخش بعدی در مورد arrayهای چند بعدی در جاوا فرا خواهید گرفت.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
85
مطمئنا موافق هستید که این مورد کمی گیج کننده است .در بخش بعدی نگاهی به ردیف ها و رشته ها خواهیم
داشت.
Arrayهایی که تاکنون استفاده کرده اید تناه یک ستون داده دارند .اما می توانید یک arrayبرای نگهداری
بیشتر از یک ستون تنظیم کنید .این arrayها چند بعدی نامیده می شوند .به عنوان مثال یک صفحه ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
86
گسترده را با ردیف ها و ستون ها در نظر بگیرید .اگر 6ردیف و 5ستون داشته باشید ،صفحه ی گسترده ی
شما می تواند 30عدد را در خود داشته باشد ،که ممکن است مانند تصویر زیر به نظر برسد:
یک arrayچند بعدی موردی است که می تواند همه ی مقادیر باال را در خود داشته باشد ،که آنها را مانند زیر
این arrayبه روش تنظیم یک arrayعادی تنظیم می شود ،به جز اینکه در این مورد دو مجموعه کروشه دارید.
اولین مجموعه از کروشه ها برای ردیف ها می باشد و دومین مجموعه نیز برای ستون ها می باشد .در خط باال به
جاوا اعالم کرده ایم که یک arrayبا 6ردیف و 5ستون تنظیم کند .برای حفظ مقادیر در یک arrayچند بعدی،
باید مراقب دنبال کردن ردیف ها و ستون ها باشید .در اینجا کدهایی را برای پر کردن اولین ردیف های اعداد از
بنابراین اولین ردیف ،ردیف 0می باشد .سپس ستون ها از 0تا 4می باشند که 5آیتم هستند .برای پر کردن
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
87
اعداد ستون همان است ،اما اعداد مربوط به ردیف همه 1نی باشند.
تکنیک مورد نیاز برای دسترسی به همه ی آیتم ها در یک arrayچند بعدی ،استفاده از یک loopداخل یکی
دیگر می باشد .در اینجا کدی را مشاهده می کنید برای دسترسی به همه ی اعداد در باال .این برنامه از یک
اولین for loopبرای ردیف ها استفاده می شود و دومین for loopبرای ستون ها .در اولین چرخش از اولین
،loopمقدار متغیر iعدد 0خوهد شد .کد داخل for loopیک loopدیگر می باشد .تمام این loopدوم
هنگامی که مقدار متغیر iعدد 0باشد ،اجرا خواهد شد . for loopدوم از یک متغیر به نام jاستفاده خواهد
] aryNumbers[ i ][ j
بنابراین سیستم دو loopبرای وارد کردن همه ی مقادیر به یک arrayچند بعدی استفاده می شود ،ردیف به
ردیف.
تمرین
برنامه ی فوق در جایی به پایان می رسد که در آن در حال نوشتن برنامه ای برای چاپ تمام مقادیر از صفحه ی
گسترده هستیم .وقتی که این کار انجام می شود ،پنجره ی Outputچیزی شبیه به تصویر زیر خواهد بود:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
88
Arrayهای چندبعدی می توانند گول زننده نیز باشند ،اساسا به این دلیل که حفظ مسیر ستون ها و ردیف های
شما سخت می باشد! در بخش بعدی در مورد لیست های arrayفرا خواهید گرفت.
اگر از تعداد آیتم هایی که قرار است در arrayقرار بگیرند ،اطالعی ندارید ،ممکن ست بهتر باشد از چیزی به
نام ArrayListاستفاده کنید .یک ArrayListدر واقع یک ساختار دینامیک داده می باشد ،به این معنا که
آیتم ها قابل حذف و اضافه از لیست می باشند .یک arrayمعمولی در جاوا یک ساختار استاتیک داده می
;import java.util.ArrayList
زمانی که آبجکت ArrayListجدید داشته باشید ،می توانید با متود ، addعناصری به آن اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
89
بین پرانتزهای addآنچه را که می خواهید به ArrayListاضافه کنید ،قرار دهید .به هرحال فقط می توانید
آبجکت ها را اضافه کنید .سه آیتم اولی که به لیست باال اضافه کرده ایم ،آبجکت های Stringمی باشند.
چهارمین آیتم یک عدد می باشد .اما این عدد یک آبجکت از نوع صحیح خواهد بود.
آیتم ها در لیست می توانند توسط یک عدد Indexو با استفاده از یک متود getمورد اشاره قرار بگیرند:
) listTest.get( 3
این خط آیتم را روی لیست در Index position 3خواهد گرفت .اعداد ایندکس شمارش را از 0شروع می کنند،
;)listTest.remove(2
حذف یک آیتم باعث تغییر اندازه ی ArrayListخواهد شد ،بنابراین وفتی از عدد شاخص استفاده می کنید،
وقتی سعی در به دست آوردن یک آیتم روی لیست دارید ،باید مراقب باشید .اگر آیتم شماره ی 2را حذف
کرده ایم ،بنابراین لیست فوق فقط حاوی 3آیتم خواهد بود .سعی در به دست آوردن با عدد شاخص ،3منجر
برای وارد شدن به هر آیتم در ، ArrayListمی توانید چیزی به نام یک Iteratorرا تنظیم کنید .ایک گروه در
;import java.util.Iterator
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
90
این خط یک آبجکت Iteratorجدید تنظیم می کند که می تواند برای وارد شدن به آیتم ها در ArrayListبه
نام listTestاستفاده شود .دلیل استفاده از یک آبجکت Iteratorاین است که این آبجکت دارای متودهایی به
{ ) ) (while ( it.hasNext
;) ) (System.out.println( it.next
}
متد hasNextیک مقدار Booleanرا گزارش می دهد .اگر آیتمی در ArrayListوجود نداشته باشد ،مقدار
falseخواهد بود .متود بعدی می تواند برای وارد شدن همه ی آیتم ها در لیست استفاده شود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
91
این خط به شما یک روش سریع برای مشاهده ی آیتم های روی لیستتان ارائه می دهد .وقتی کد اجرا می شود،
first item second item third item 7 Whole list=[first item, third item, 7] Position 1=third item
به طور خالصه ،وفتی از تعداد عناصری که قرار است در لیستی از آیتم ها قرار بگیرند ،مطمئن نیستید ،از
ArrayListاستفاده کنید .اکنون بررسی arrayها را رها می کنیم .در بخش بعدی به بررسی رشته ها خواهیم
پرداخت.
در مورد رشته های جاوا موارد بیشتری از آنچه با چشم دیده می شود وجود دارد .بر خالف متغیرهای intیا
متغیرهای ، doubleرشته ها آبجکت می باشند .و این در عمل به این معناست که با رشته های متن کارهایی
می توانید انجام دهید که با متغیرهای doubleیا intنمی توانید انجام دهید ( .همین مورد برای انواع داده ی
long ،float ،char ،single ،byte ،booleanو shortنیز به کار می رود :آنها مانند رشته ها آبجکت نیستند)
قبل از اجرای رشته های متن ،در اینجا اطالعات اصلی مربوط به رشته ها را مشاهده خواهید کرد.
یک رشته مجموعه ای از کاراکترهای Unicodeمی باشد که تحت عنوان نام یک متغیر حفظ می شوند .رشته ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
92
این خط به جاوا می گوید که یک رشته آبجکت با چهار کاراکتر""l" ،"i" ، "Bو یک " "lدیگر برقرار کند .در مجموعه
کاراکتر ، Unicodeاین مقادیر عبارتند از\u006c . ،\u006c ،\u0069 ،: \u0042مقادیر Unicodeبه عنوان
اعداد هگزادسیمال ذخیره می شوند .حروف بزرگ ( Aتا ) Zبا استفاده از مقادیر \u0041تا \u005aذخیره
می شوند ،در حالیکه حروف کوچک ( aتا ) zبا استفاده از مقادیر هگزادسیمال \u0061تا \u007aذخیره می
شوند.
در بخش قبل یک arrayوجود داشت که رشته های متن را حفظ می کرد .سپس arrayرا مرتب سازی کردیم.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
93
قبال ذکر کردیم که لغت " "Thisدر ابتدا قرار می گیرد .اگر قرار است arrayبه ترتیب حروف الفبا مرتب شود،
انتظار می رود که لغت " "aدر ابتدا قرار بگیرد .این به این خاطر است که لغت " "aبا حرف کوچک دارای مقدار
هگزادسیمال u\0061می باشد ،که عدد دهدهی 97می باشد .اما حرف بزرگ " "Tدارای یک مقدار
هگزادسیمال u\0054می باشد که عدد دهدهی 84است 84 .کمتر از 97می باشد ،بنابراین " "Tدر ابتدا قرار
می گیرد.
بسیار خود ،اجازه بدهید در موزد اجرای رشته های متن کارهایی انجام دهیم .رشته متدهایی که مورد بررسی
متدهای اول در باال متدهای آسانی می باشند ،که به حروف بزرگ و کوچک تبدیل می شوند .در بخش بعد در
تبدیل رشته های خود به حروف بزرگ و کوچک کار آسانی می باشد :تنها از متودهای داخلی toUpperCaseو
toLowerCaseاستفاده کنید.
برای این کار یک پروژه ی جدید را شروع کرده و کد زیر را به آن اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
94
دو خط اول از کد یک متغیر Stringبرای حفظ متن " "text to changeتنظیم می کنند و سپس آن را چاپ می
کنیم .خط سوم یک متغیر دوم Stringبه نام نتیجه را تنظیم می کند .و خط چهارم می باشد که در آن تبدیل را
انجام می دهیم:
برای استفاده از یک متود stringابتدا رشته ی مورد نظر را تایپ کنید .برای ما این رشته در متغیر
changeCaseنامیده می شود .پس از نام متغیر یک نقطه تایپ کنید ،سپس لیستی از متودهای موجود را
مشاهده می کنید که می توانید در رشته ی خود از آنها استفاده کنید . toUpperCaseرا انتخاب کنید) .متد
پس از اینکه جاوا لغت را به حروف بزرگ تغییر داده است ،ما رشته ی جدید را به متغیر نتیجه ی خود مرتب می
کنیم.
وقتی برنامه اجرا می شود ،پنجره ی Outputنتیجه ی زیر را نمایش خواهد داد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
95
اما شما مجبور نیستید که لغت تغییر یافته را در یک متغیر جدید ذخیره کنید .این کار نیز انجام می شود:
در اینجا جاوا تنها با تغییر رشته و بدون نیاز به اختصاص دادن نتیجه به یک متغیر جدید ،به کار خود ادامه
خواهد داد.
در عوض اگر می خواهید فقط به حروف کوچک تغییر دهید ،از متود toLowerCaseاستفاده کنید .این متود
در بخش بعدی چگونگی مقایسه ی رشته ها را در جاوا مشاهده خواهید کرد.
شما می توانید یک متود را با متود دیگر مقایسه کنید ( .در هنگام مقایسه جاوا از مقادیر هگزادسیمال به جای
خود حروف استفاده خواهد کرد .).به عنوان مثال اگر بخواهید لغت " "Apeرا با لغت " "Appمقایسه کنید تا
ببینید کدامیک نخست قرار می گیرد ،می توانید از یک رشته متود داخلی به نام compareToاستفاده کنید.
برای این کار نیازی به شروع یک پروژه ی جدید ندارید :به راحتی روی کدی که دارید کامنت بگذارید یا آن را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
96
ما دو رشته متغیر تنظیم کرده ایم که حاوی لغا ت " "Apeو ""Appمی باشند .متود compareToدر کد باال
متد compareToیک مقدار را گزارش می دهد .مقدار گزارش شده یا کمتر از 0یا بیشتر از 0و یا مساوی 0
می باشد .اگر Word1قبل از Word2قرار بگیرد ،مقدار گزارش شده کمتر از 0خواهد بود .اگر Word1بعد از
Word2قرار بگیرد ،مقدار گزارش شده بزگتر از 0خواهد بود .اگر هر دو لغت یکشان باشند ،مقدار 0گزارش
خواهد شد.
بنابراین الزم است کقداری را اختصاص دهید که compareToبه یک متغیر بازمی گرداند .ما مقدار را در یک
متغیر صحیح به نام نتیجه قرار می دهیم .عبارات IFدر کد به سادگی تست می کنند تا مورد را در متغیر نتیجه
مشاهده کنند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
97
به هرحال وقتی یک رشته از متن را با رشته ای دیگر مقایسه می کنید ،جاوا به جای حروف واقعی ،مقادیر
هگزادسیمال تاکید شده را مقایسه می کند .از آنجایی که حروف بزرگ دارای مقدار هگزادسیمال کمتری نسبت
به حروف کوچک هستند ،حرف بزرگ Aدر Appقبل از حرف کوچ aدر apeقرار خواهد گرفت .می توانید این
مورد را امتحان کنید .در کد خود " "Apeرا به ""apeتغییر دهید .خروجی ""Word1 is more than Word2
خواهد بود ،به این معنا که از لحاظ الفبایی جاوا لغت apeرا بعد از appقرار خواهد داد.
برای حل مشکل یک متود مرتبط به نام compareToIgnoreCaseوجود دارد .همانطور که از نام آن پیداست
حروف بزرگ و کوچک نادیده گرفته می شوند .با استفاده از این متود از لحاظ الفبایی لغت apeقبل از Appقرار
خواهد گرفت.
در بخش بعدی متد مفید دیگری به نام indexOfرا مورد بررسی قرار خواهیم داد.
متد indexOfبرای قرار دادن یک کاراکتر یا یک رشته در داخل یک رشته ی دیگر استفاده می شود .به عنوان
مثال می توانید از آن برای بررسی وجود کاراکتر @ در یک آدرس ایمیل استفاده کنید .اجازه بدهید از این مثال
مجددا می توانید روی کد خود کامنت بگذارید یا آن را حذف کنید .اما کد جدیدی برای امتحان کردن وجود دارد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
98
میخواهیم وجود نماد @ را در آدرس ایمیل بررسی کنیم ،بنابراین ابتدا یک متغیر charتنظیم کرده و به آن
مقدار '@' اختصاص می دهیم ( .به نماد عالمت نقل قول متغیر charدقت داشته باشید .).پس از تنظیم یک
آدرس ایمیل ،یک متغیر نتیجه داریم ،این یک متغیر intمی باشد .دلیل این که نتیجه یک عدد صحیح می باشد
این است که متود indexOfیک مقدار گزارش خواهد داد .این مقدار عدد مربوط به موقعیت کاراکتر عالمت را
در رشته ی آدرس ایمیل باز خواهد گرداند .در اینجا خط مربوطه را مشاهده می کنید:
رشته ای که در حال جستجوی آن هستید در ابتدا قرار می گیرد .پس از یک نقطهindexOf ،را تایپ کنید .بین
پرانتزهای indexOfگزینه های زیادی دارید :یکی از این گزینه ها تایپ کردن یک کاراکتر مجزا ( یا نام متغیر
)charمی باشد .ما متغیر عالمت خود را ) (ampersandبین پرانتزهای indexOfقرار داده ایم .جاوا موقعیت
کاراکتر @ را در آدرس ایمیل به ما خواهد گفت .این مقدار را در متغیر نتیجه ذخیره خواهد کرد.
وقتی کد را اجرا می کنید خروجی 4خواهد بود .ممکن است تصور کنید که عالمت @ پنجمین کاراکتر در آدرس
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
99
به هرحال اگر کاراکتر در لغتی که آن را جستجو می کنید وجود نداشته باشدindexOf ،مقدار -1را گزارش می
دهد .برای امتحان این مورد نماد @ را از آدرس ایمیل خود حذف کنید .سپس مجددا کد خود را اجرا کنید که
می توانید از مقدار گزارش شده ی -1به نفع خود استفاده کنید .در اینجا مجددا کدی را مشاهده می کنید با
بنابراین اگر نتیجه ی indexOfعدد -1باشد ،می توانیم به یوزر اجازه ی ادامه ی کار بدهیم.
می توانید از indexOfبرای تست کردن بیشتر از یک کاراکتر استفاده کنید .کد زیر آدرس ایمیل را چک می
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
100
کد تقریبا یکسان می باشد ،به جز اینکه اکنون در حال استفاده از متغیر Stringبرای حفظ متنی هستیم که می
اگر متنی که در جستجوی آن هستیم در stringکه قبل از نقطه ی مربوط به indexOfیافت نشد ،مجددا نتیجه
ی -1گزارش داده خواهد شد .در غیر این صورت indexOfموقعیت اولین کاراکتر هماهنگ سازی را گزارش
خواهد داد .در کد فوق وقتی شمارش را از 0شروع می کنید ،نقطه هفتمین کاراکتر در آدرس ایمیل می باشد.
می توانید یک موقعیت شروع نیز برای جستجوهای خود تعیین کنید .در مثال آدرس ایمیل می توانیم جستجو
برای " ".comرا پس از نماد @ آغاز کنیم .در اینجا کدی را می بینید که موقعیت نماد @ را تعیین می کند و
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
101
تنها تفاوت افزودن یک متغیر اضاقه بین پرانتزهای indexOfمی باشد .ما هنوز رشته ای داریم که در جستجوی آن هستیم
( که متنی است که در متغیر dotcomقرار می گیرد) ،اما اکنون یک موقعیت ابتدایی برای جستجو داریم .این موقعیت
مقدار متغیری به نام atPosمی باشد .مقدار atPosبا استفاده از indexOfبرای تعیین موقعیت نماد @ در آدرس ایمیل به
دست می آید .بنابراین جاوا به جای شروع از ،0جستجو را از این موقعیت آغاز خواهد کرد که پیش فرض می باشد.
الزم است یک متغیر Booleanبرای endsWithتنظیم کنید ،زیرا متود پاسخ trueیا falseرا گزارش خواهد
داد .رشته ای که سعی در تست کردن آن دارید ،بین پرانتزهای endsWithقرار می گیرد و متنی که در
جستجوی آن هستید قبل از آن می آید .اگر متن در جستجوی رشته باشد ،یک مقدار trueگزارش داده می
شود ،در غیر اینصورت falseخواهد بود .برای بررسی مقدار می توانید یک عبارت if … elseاضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
102
{ else
;) " System.out.println( "Email Address OK
}
{ ) if (ending == false
در بخش بعدی چگونگی استفاده از متودی به نام substringرا فرا خواهید گرفت .
متن دیگر جدا سازید .برای مثال در برنامه ی فوق در آدرس ایمیل خود می توانیم پنج کاراکتر آخر را از کل
برای تمرین با substringمی خواهیم دو حرف اول از نام خانوادگی را تغییر دهیم و آنها را با دو حرف اول یک
نام شخصی جابه جا سازیم و بالعکس .بنابراین اگر این نام را داشته باشیم:
""Bill Gates
حروف " "Gaاز " "Gatesرا با " "Biاز " "Billجابه جا سازیم تا لغت ""Bitesرا بسازیم .بنابراین " "Biاز ""Billبا
""Gaاز ""Gatesجابه جا خواهد شد تا لغت " "Gallرا بسازد .نام جدید چاپ شده " "Gall Bitesخواهد بود.
ما از substringدر قسمت بیشتر این برنامه استفاده خواهیم کرد . Substringبه این صورت کار می کند:
در مورد " "Bill Gatesبرای جستجو یک رشته تنظیم می کنید .رشته ای که سعی در جستجوی آن دارید ،بعد از
یک عالمت تساوی قرار می گیرد .بعد از یک نقطه ) ،(dotنام متود ،substring ،را تایپ کنید .دو روش برای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
103
استفاده از substringوجود دارد و تفاوت در اعداد بین پرانتزها می باشد .در کد فوق دو عدد 0و 2را داریم.
این به این معناست که گرفتن کاراکترها در موقعیت 0در رشته آغاز می شود و وقتی دو عدد دارید ،این فرایند
متوقف می شود .این دو کاراکتر بازگردانده می شوند و در متغیر FirstNameCharsقرار می گیرند .اگر می
خواهید درست در انتهای رشته قرار بگیرید ،کافیست کار زیر را انجام دهید:
این بار بین پرانتزهای substringتنها یک عدد داریم .اکنون جاوا از کاراکتر دو در رشته ی FirstNameآغاز
یک برنامه ی جدید آغاز کنید تا این برنامه را امتحان کنید .یک خط چاپ به انتهای کد خود اضافه کرده و کد
وقتی که برنامه اجرا می شود ،پنجره ی Outputباید شبیه به تصویر زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
104
بنابراین متود substringبه ما اجازه ی گرفتن دو کاراکتر اول نام " "Billرا داده است.
برای گرفتن دو کاراکتر اول ،یک 0و یک 2بین پرانتزهای substringداشتیم .ممکن است تصور کنید برای
بعد از همه ی اینها هنوز دو کاراکتر می خواهیم .فقط این بار 5به جاوا می گوید که از " "Gدر ""Gatesآغاز
کنید ( .اولین موقعیت در یک رشته موقعیت 0می باشد و نه .)1بنابراین از موقعیت 5در این رشته آغاز کرده
و دو کاراکتر را بگیرید.
به هرحال اجرای آن کد منجر به بروز خطا خواهد شد .این به این حاطر است که دومین عدد بین پرانتزهای
substringبه معنای تعداد کاراکترهایی که می خواهید بگیرید نیست ،بلکه به معنای موقعیت نهایی در رشته
می باشد .با مشخص کردن ،2به جاوا می گوییم که در کاراکتری در موقعیت 2از رشته به اتمام برسد .از
آنجایی که نمی توانید از موقعیت 6به عقب بازگشته و به موقعیه 2بروید ،خطایی دریافت می کنید.
(نکته :اگر شمارش را در رشته ی " "Billاز 0شروع کنید ،ممکن است تصور کنید که موقعیت 2حرف " "lمی
باشد و حدس شما درست است .اما substringقبل از کاراکتر در آن موقعیت آغاز می کند و پس از آن).
بنابراین برای گرفتن " "Gaاز " "Gatesمی توانید مانند زیر عمل کنید:
اکنون دومین عدد طول رشته منهای 3کاراکتر می باشد .طول رشته تعداد کاراکترهایی است که آن رشته
دارد ". "Bill Gatesدارای 10کاراکتر شامل فاصله ،می باشد .اگر سه کاراکتر را کنار بگذارید 7 ،کاراکتر
خواهید داشت .بنابراین ما به substringمی گوییم که در کارامتر 5شروع شده و در کاراکتر 7به پایان
برسد.
این برنامه برای افرادی با نام " "Bill Gatesبه درستی کار می کند .اما اگر نام شما " "Billy Gatesمی بود ،این
برنامه به درستی کار نمی کرد .بنابراین کد فوق کاراکتر فاصله به عالوه ی حرف " "Gرا می گیرد که به هیچ
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
105
وجه کاراکترهای مورد نظر ما نیستند .ما می خواهیم که برنامه با هر دو نامی که وارد می شوند ،کار کند.
کاری که می توانیم انجام دهیم این است که به موقعیت فاصله در هر دو نام دقت داشته باشیم .دو کاراکتری
که می خواهیم از نام دوم بگیریم همیشه درست بعد از کاراکتر فاصله قرار می گیرند .ما به کدی احتیاج داریم
برای تعیین کاراکتر فاصله ،می توانید یک فاصله بین دو نماد نقل قول )"( قرار دهید .این کاراکتر پس از
پرانتزهای indexOfقرار می گیرد .مقدار بازگشت داده شده یک عدد صحیح خواهد بود که موقعیت اولین
این تمرین را می توانید با اضافه کردن خط فوق به کد خود امتحان کنید :برای چک کردن Outputیک خط چاپی
اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
106
بنابراین در این رشته فاصله در موقعیت 4می باشد .ما می توانیم از این واقعیت برای گرفتن دو کاراکتر اول از
" "Gatesیا در واقع هر نام دوم دیگری استفاده کنیم .به جاوا می گوییم که از اولین کاراکتر بعد از فاصله آغاز
ما می خواهیم که از اولین کاراکتر بعد از فاصله آغاز کنیم ) (space + 1و دو کاراکتر بعد از این موقعیت به
خطوط زیر را به کد خود اضافه کنید (خطوطی که هایالیت شده اند .متد جدید substringدر دو خط قرار می
گیرد ،اما شما اگر تمایل داشته باشید می توانید روی یک خط قرار دهید:).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
107
بنابراین اکنون ما " "Biاز Billو " "Gaاز Gatesرا داریم .آنچه اکنون باید انجام دهیم گرفتن بقیه ی کاراکترها
مجددا می توانیم از substringبرای گرفتن بقیه ی کاراکترها از نام اول استفاده کنیم:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
108
به اعداد بین پرانتزهای substringدقت کنید .برای گرفتن دیگر کاراکترهای نام اول ،اعداد عبارتند از:
spacePos
این به جاوا می گوید که از موقعیت 2شروع کرده و درست به موقعیت فاصله برود .به هرحال گرفتن بقیه ی
) ((spacePos + 1) + 2, FullName.length
(spacePos1 + 1) + 2موقعیت شروع سومین کاراکتر از دومین نام می باشد .ما می خواهیم که در طول
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
109
اکنون تمام قسمت های نام را داریم .برای اتصال آنها به یکدیگر ،می توانیم از الحاق )(concatenation
استفاده کنیم:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
110
می توانیم از خطوط چاپی رها شویم و از یک یوزر بخواهیم که نام اول و نام دوم را وارد کند .در اینجا برنامه ی
جدید را مشاهده می کنید ( تنها افزایش برای ورودی صفحه کلید می باشد که قبال از آن استفاده کرده اید):
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
111
وقتی برنامه را اجرا می کنید و نام و نام خانوادگی را وارد می کنید ،پنجره ی Outputباید مانند تصویر زیر
باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
112
البته باید چند برنامه ی بررسی خطا نیز اضافه کنیم .اما خواهیم پذیرفت که یوزر می تواند یک نام و یک نام
خانوادگی با یک فاصله بین آنها وارد کند .در غیر اینصورت برنامه با شکست مواجه می شود .به هرحال اجازه
در این کد سعی داریم شباهت دو آدرس ایمیل را بررسی کنیم .دو خط اول دو متغیر stringرا تنظیم می کنند،
برای هر آدرس ایمیل یک متغیر .سومین خط یک متغیر Booleanبرقرار می کند .این به این خاطر است که
متود equalsمقدار trueیا falseرا بازمی گرداند .چهارمین خط جایی است که در آن از متد استفاده می کنیم:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
113
بین پرانتزهای متود ، equalsرشته ای را قرار می دهید که سعی دارید آن را بررسی کنید .رشته ی دیگر قبل از
متود تساوی قرار می گیرد .جاوا به شما می گوید که آیا این دو یکسان هستند یا نه (true or false).عبارت
به هرحال متود equalsفقط آبجکت ها را مقایسه می کند .این برای رشته ها خوب می باشد ،زیرا آنها نیز
آبجکت می باشند .اما نمی توانید برای مقایسه ی متغیرهای intاز متود equalاستفاده کنید .برای مثال این
;)isMatch = num1.equals(num2
متغیر intنوع اولیه ی داده می باشد و نه یک آبجکت .شما می توانید نوع داده ی intرا به یک آبجکت
بازگردانید ،گرچه:
در اینجا متغیر intبا نام num1به یک آبجکت عدد صحیح برگردانده شده است .به استفاده از کلمه ی کلیدی
newدقت کنید .بین پرانتزهای ، Integerنوع اولیه ی داده ی intرا قرار می دهید که قصد تغییر آن را به یک
آبجکت دارید.
متد مفید دیگری در جاوا charAtمی باشد .در بخش بعد به بررسی این متد خواهیم پرداخت .
می توانید چک کنید که کدام کاراکتر مجزا در یک رشته ی خاص قرار می گیرد .متود charAtدر جاوا به این
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
114
این کد حرف مربوط به موقعیت 4را در رشته ی آدرس ایمیل بررسی می کند .مقدار گزارش شده متغیری از نوع
charمی باشد:
وقتی که کد فوق اجرا می شود ،خروجی کاراکتر @ می باشد .عدد بین پرانتزهای ، charAtآن موقعیتی در
رشته می باشد که سعی در بررسی آن دارید .در اینجا قصد داریم به کاراکتری در موقعیت 4از رشته ی
یک استفاده ی مفید از charAtگرفتن یک حرف از یک رشته متغیر میباشد که توسط یک یوزر تایپ شده و
سپس به یک متغیر مجزای charتبدیل شده است .برای مثال می توانستید از یوزر بخواهید که Yتایپ کرده و
ادامه دهد و یا یک Nتایپ کرده و خارج شود .نگاهی به این کد داشته باشید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
115
نمی توانیم برای دریافت یک حرف مجزا و ذخیره در یک متغیر ، charمستقیما از گروه Scannerاستفاده کنیم.
بنابراین از متود ) ( nextبرای گرفتن رشته ی بعدی استفاده می کنیم که یوزر وارد کرده است .یک next
next double ،next long ،integerو حتی next Booleanوجود دارد .اما هیچگونه next charوجود ندارد.
( به یاد داشته باشید که یک متغیر charیک عدد Unicodeرا به عنوان یک عدد صحیح ذخیره می کند).
میتوانیم از charAtبرای گرفتن یک کاراکتر از هر رشته ای که یوزر وارد می کند استفاده کنیم ،حتی اگر یوزر
تمام آنچه می گوییم عبارت است از " گرفتن کاراکتر در موقعیت 0در رشته ای به نام رشته ی aStringو
ما یک عبارت IFبرای تست کردن آنچه در متغیر aCharمی باشد ،اضافه کرده ایم ( .به استفاده از عالمت
ما قصد داریم که لغت " "yourرا جایگزین ""youکنیم .کد مربوط را در اینجا مشاهده می کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
116
روش های زیادی در استفاده از متود replaceوجود دارد و آنها در آنچه بین پرانتزهای متود قرار می گیرد با
یکدیگر متفاوت هستند .ما یک ترتیبی از کاراکترها را با ترتیبی دیگر جایگزین می کنیم .کاما مانند کلمه ی
(شما می توانید از چیزی به نام عبارت متداول ) (regular expressionدر متودهای جایگزینی خود استفاده
Trim
شما فضاهای سفید را می توانید در رشته های خود مرتب کنید .فضای سفید مواردی مانند کاراکترها ،تب ها و
کاراکترهای newlineمی باشند – به عبارت دیگر کاراکترهایی که شما نمی توانید ببینید .استفاده از متود
trimآسان می باشد:
بنابراین متود trimبعد از رشته ای که می خواهید اصالح کنید ،قرار می گیرد .کاراکترهای خالی قبل از لغت
اگر از طرف یوزر ورودی دریافت می کنید ،استفاده از trimروی رشته های وارد شده فکر بسیار خوبی می باشد .
اکنون اجرای رشته را رها کرده و ادامه می دهیم .بخش بعد رشته های فرمت شده از متن می باشند .
کاراکترها با عنوان ( format specificationمشخصات فرمت) را درک می کند .سپس این فرمان یک رشته از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
117
متن را گرفته و و آن را قالب بندی می کند ،براساس مشخصات قالب تایید شده .به عنوان مثال فرض کنید که
می خواهیم پنجره ی Outputمتنی را در ستون های مرتب نمایش دهد ،مانند تصویر زیر:
اولین ستون از سمت چپ و دومین ستون از سمت راست مرتب شده اند .کد مربوط به Exam_Nameو
برای به دست آوردن ستون مرتب شده از سمت چپ نیاز به یک نماد درصد ،یک نماد منها ،تعداد کاراکترها و
سپس حرف "s" ( sکوچک )دارید .بنابراین ''''%-15sبه معنای 15کاراکتر مرتب شده از سمت چپ می باشد.
برای به دست آوردن یک ستون مرتب شده از سمت راست همان ترتیب کاراکترها استفاده می شوند ،به جز
عالمت منها.
برای به دست آوردن یک newlineنماد %nاستفاده می شود .دقت داشته باشید که کاراکترها با عالمت های
پس از یک کاما ،متنی را تایپ می کنید که قصد قالب بندی آن را دارید .اولین کاما در کد فوق مشخصات قالب
) ( format specificationرا از متنی که قرار است قالب بندی شود ،جدا می سازد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
118
اگر بخواهید اعداد را قالب بندی کنید یا می توانید از کاراکتر " "dاستفاده کنید یا ،برای اعداد شناور ممیزی ،از
کاراکتر"f".
در اینجا مثال هایی از کدهای مربوط به ، Stringعدد صحیح و قالب بندی ممیز شناور ) (floating pointرا
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
119
مانند فوق ،اما اعداد 10مکان را با فضاهایی در سمت چپ ،اشغال می کنند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
120
یک عدد ممیزی شناور را قالب بندی کرده و یک کاراکتر newlineاضافه کنید .عدد ممیزی دارای شش مکان
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
121
درست مانند فوق ،اما تنها دو قسمت اعشاری را قالب بندی خواهد کرد.
و سرانجام ،در اینجا جدولی را از شروع این بخش قالب بندی مشاهده می کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
122
یک تمدین با قالب بندی داشته باشید و چگونگی به دست آوردن آن را مشاهده کنید .اگر پیغام خطا دریافت
کردید ،ممکن است قالب بندی نوع " "sرا با قالب بندی نوع " "dاشتباه گرفته باشید .
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
123
متدهای جاوا
متد جاوا مجموعه ای از وضعیت هاست که برای اجرای یک عملکرد گروه بندی می شوند .به عنوان مثال وقتی
متد System.out.printlnرا فرا خوانی می کنید ،درواقع سیستم چندین عبارت را برای نمایش یک پیغام در
consoleاجرا می کند.
اکنون شما چگونگی ایجاد متودهای خود را با بازگشت مقادیر یا بدون بازگشت مقادیر ،فراخوانی یک متود با
پارامترها و بدون پارامترها ،بارگذاری متودها با استفاده از همان نام ها و به کارگیری متود انتزاع در طراحی
ایجاد متد
با توجه به مثال زیر می توانید ترکیب یک متد را توضیح دهید
{
// body
}
در اینجا:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
124
تعریف متود حاوی یک تیتر و یک بدنه می شود .همین مورد در زیر نشان داده شده است:
مثال:
}
: Modifierنوع accessمربوط به متود را تعریف می کند و استفاده از آن انتخابی می باشد
: nameOfMethodاین نام متود می باشد .ویژگی خاص متود حاوی نام متود و لیست پارامترها می
باشد.
: Parameter Listلیست پارامترها که حاوی نوع ،ترتیب و تعداد پارامترهای یک متود می باشد .اینها
: method bodyبدنه ی متود تعریف می کند که متود با عبارات چه انجام می دهد.
مثال
در اینجا source codeمتود تعریف شده ی باال به نام )( maxمی باشد .این متود دارای دو پارامتر num1و
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
125
/** the snippet returns the minimum between two numbers */
;int min
;min = n2
else
;min = n1
;return min
}
فراخوانی متد
برای استفاده از یک متد ابتدا باید فراخوانده شود .دو روش در فراخوانی یک متد وجود دارد ،به عنوان مثال
فرایند فراخوانی ماود ساده می باشد .وقتی که برنامه ای یک متد را فرامی خواند ،کنترل برنامه به فراخوانی
متد تغییر می یابد .سپس این متد فراخوانده شده کنترل را به فراخواننده تحت دو شرط ،بازمی گرداند ،وقتی:
متدهایی که پوچ ) (voidگزارش می دهند ،برای فراخوانی یک عبارت در نظر گرفته می شوند .اجازه بدهید
; )"!System.out.println("This is tutorialspoint.com
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
126
مثال
:در زیر مثالی از چگونگی تعریف یک متد و چگونگی فراخوانی آن را مشاهده می کنید
int a = 11;
int b = 6;
int min;
min = n2;
else
min = n1;
return min;
Minimum value = 6
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
127
لغت کلیدی voidبه ما اجازه می دهد تا متدهایی را ایجاد کنیم که هیچ مقداری را بازنمی گرداند .در مثال زیر
یک متد methodRankPointsرا در نظر می گیریم .این متد یک متد voidمی باشد که هیچ مقداری را بازنمی
گرداند .فراخوانی به یک متد voidباید یک عبارت باشد ،به عنوان مثال) ،methodRankPoints(255.7که
یک عبارت جاواست که با یک نقطه ویرگول به پایان می رسد ،همانطور که در مثال زیر نشان داده شده است
مثال
;)methodRankPoints(255.7
}
;)"System.out.println("Rank:A1
}
;)"System.out.println("Rank:A2
}
{ else
;)"System.out.println("Rank:A3
}
}
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
128
Rank:A1
هنگام کار تحت فرایند فراخوانیargument ،باید منتقل شود .اینها باید به همان ترتیبی باشند که
پارامترهای مربوطه در تعیین متود هستند .پارامترها می توانند با مقدار یا با مرجع منتقل شوند.
انتقال پارامترها با مقدار به معنای فراخوانی یک متود با یک پارامتر می باشد .از این طریق مقدار argument
برنامه ی زیر مثالی از انتقال پارامتر با مقدار را نشان می دهد .مقادیر argumentها ،حتی پس از فراخوانی
;int a = 30
;int b = 45
;)swapFunction(a, b
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
129
// Swap n1 with n2
int c = a;
a = b;
b = c;
}
}
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30
Metho Overloading
method این امر،وقتی که یک گروه دارای دو و یا چند متود هم نام اما با پارامترهای متفاوت می باشد
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
130
اجاره بدهید بگوییم که می. اجازه بدهید مثال قبل را برای یافتن حداقل تعداد عدد صحیح در نظر بگیریم
برای ایجاد دو یا چند متد همoverloading سپس مفهوم. را پیدا کنیمdouble خواهیم حداقل تعداد نوع
int a = 11;
int b = 6;
double c = 7.3;
double d = 9.4;
// for integer
int min;
min = n2;
else
min = n1;
return min;
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
131
;double min
;min = n2
else
;min = n1
;return min
}
}
متدهای overloadingبرنامه را خوانا می سازد .در اینجا دارای یک نام می باشند ،اما پارامترهای متفاوت
متد جاوا مجموعه ای از وضعیت هاست که برای اجرای یک عملکرد گروه بندی می شوند .به عنوان مثال وقتی
متد System.out.printlnرا فرا خوانی می کنید ،درواقع سیستم چندین عبارت را برای نمایش یک پیغام در
consoleاجرا می کند.
اکنون شما چگونگی ایجاد متدهای خود را با بازگشت مقادیر یا بدون بازگشت مقادیر ،فراخوانی یک متد با
پارامترها و بدون پارامترها ،بارگذاری متدها با استفاده از همان نام ها و به کارگیری متد انتزاع در طراحی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
132
گاهی اوقات وقتی برنامه ای را اجرا می کنید ،تمایل خواهید داشت که اطالعات را به برنامه انتقال دهید .این
یک command-line argumentاطالعاتی است که مستقیما نام برنامه را در هنگام اجرا روی خط فرمان دنبال
می کند .دسترسی به argumentهای خط فرمان در داخل یک برنامه ی جاوا بسیار آسان می باشد ،آنها مانند
مثال
برنامه ی زیر همه ی argumentهای خط فرمان را که از طریق آنها فراخوانده شد ،نمایش می دهد:
اجرای این برنامه را به شکلی که در زیر نشان داده شده ،امتحان کنید:
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
133
args[6]: -100
سازنده ها
یک سازنده در هنگام ایجاد ،یک آبجکت را مقدار دهی می کند .این سازنده هم نام گروه خود می باشد و از
لحلظ نحوی مشابه یک متد است .به هرحال سازنده ها هیچ نوع بازگشتی مشخصی ندارند.
معموال برای دادن مقادیر اولیه به متغیرهای نمونه که توسط گروه تعریف شده اند ،یا برای اجرای دیگر روش
های راه اندازی که برای ایجاد یک آبجکت کامل ،از یک سازنده استفاده خواهید کرد.
همه ی گروه ها دارای سازنده هستند ،چه شما برای آن تعریف کنید و چه نکنید ،زیرا جاوا به طور خودکار یک
سازنده ی پیش فرض ارائه می دهد که همه ی متغیرهای عضو را به صفر مقدار دهی می کند .به هرحال زمانی
که شما سازنده ی خود را تعریف می کنید ،سازنده ی پیش فرض دیگر مورد استفاده قرار نمی گیرد.
مثال
{ class MyClass
;int x
// Following is the constructor
{ )(MyClass
;x = 10
}
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
134
}
}
اکثر اوقات ،به سازنده ای نیاز خواهید داشت که یک یا چند پارامتر را می پذیرد .پارامترها به همان روشی به
یک سازنده اضافه می شوند که به یک متد اضافه می شوند ،تنها کافیست آنها را در داخل پرانتزها و پس از
{ class MyClass
;int x
// Following is the constructor
{ ) MyClass(int i
;x = i
}
}
}
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
135
Variable Arguments(var-args)
پارامتر در. های هم نوع به یک متود می سازدargument شما را قادر به انتقال یک متغیر عددی ازJDK 1.5
typeName... parameterName
variable-length فقط یک پارامتر. تعیین می کنید،) دنبال می شود...( نوع را که با یک،در اعالم متود
هر پارامتر معمول دیگری باید قبل.ممکن است در یک متود تعیین شود و این پارامتر باید آخرین پارامتر باشد
printMax(34, 3, 3, 2, 56.5);
if (numbers.length == 0) {
return;
result = numbers[i];
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
136
}
این مثال نتیجه ی زیر را به دنبال دارد: The max value is 56.5 The max value is 3.0
ممکن است متودی را تعریف کنید که درست قبل از تخریب نهایی یک آبجکت به وسیله ی garbage
،collectorفراخوانده خواهد شد .این متود ) ( finalizeنامیده می شود و می تواند برای اطمینان دادن این
برای مثال :ممکن است از ) ( finalizeبرای اطمینان از بسته شدن یک فایل باز در آن آبجکت استفاده کنید.
هروقت الزم است آبجکتی از آن گروه را بازیابی کنند ،زمان اجرای جاوا آن برنامه را فرا می خواند.
در داخل متد ) ( ، finalizeفعالیت هایی را تعیین می کنید که باید قبل از تخریب یک آبجکت اجرا شوند.
{
}
در اینجا لغت کلیدی محافظت شده یک تعیین کننده است که با کد تعریف شده در خارج گروه آن ،مانع
این به این معناست که شما از زمان اجرای ) ( finalizeو حتی از اجرای آن مطلع نمی شوید .برای مثال اگر برنامه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
137
متدهای overloadingبرنامه را خوانا می سازد .در اینجا دارای یک نام می باشند ،اما پارامترهای متفاوت
در بخش های قبل از متدهایی استفاده کرده اید و مشاهده کرده اید که متدهای داخلی چقدر می توانند مفید
باشند .در این بخش چگونگی نوشتن متدهایی را برای خودتان فراخواهید گرفت.
ساختار یک متد
یک متد گروهی کد می باشد که کار خاصی انجام می دهند .اما متدهایی هستند که به روش خاصی تنظیم
شده اند .شما یک تیتر متد و یک بدنه ی متد دارید .تیتر جایی است که در آن به جاوا می گویید که چه
مقداری را متد باز خواهد گرداند( یک مقدار ، intیک مقدار ، doubleیک مقدار stringو غیره ).به همراه نوع
مقدار بازگردانده شده به یک نام برای متد خود نیاز دارید که این نام نیز در تیتر قرار می گیرد .می توانید
مقادیر را به متدهای خود انتقال دهید و این مقادیر بین دو پرانتز قرار می گیرند .بدنه ی متد جایی است که
نوع گزارش شده ی متد ) (return typeدر ابتدا قرار می گیرد که در کد باال یک نوع intمی باشد .پس از نوع
متد نیاز به یک فاصله دارید که با نام متد شما دنبال می شود .متد باال را totalنامیده ایم .بین پرانتزها به
جاوا گفته ایم که ما در متد متغیری به نام aNumberتوزیع می کنیم که یک عدد صحیح خواهد بود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
138
برای جدا کردن این متد از هر نوع کد دیگری ،نیاز به یک جفت کروشه دارید .کد شما برای متد بین کروشه ها
قرار می گیرد .به لغت returnدر متد باال دقت کنید .مشخص است که نشان دهنده ی مقداری است که می
خواهید پس از اجرای کد خود از متد خود گزارش دهید .اما این مقدار باید از همان نوع بازگشتی در تیتر متد
باشد .بنابراین اگر متد را با int totalشروع کرده باشید ،مقدار بازگشتی نمی تواند یک رشته باشد.
گاهی اوقات اصال نمی خواهید که جاوا موردی را بازگرداند .به Trimدر بخش قبل فکر کنید .ممکن است که
بخواهید فقط متد Trimبه کار خود ادامه دهد و چیزی به شما بازگردانده نشود .یک متد که هیچ مقداری را به
شما بازنمی گرداند ،می تواند با لغت voidتنظیم شود .در برخی موارد نیازی به لغت کلیدی returnنیست .در
تمام کاری که متد باال انجام میدهد چاپ کردن یک متن می باشد .این متد می تواند به کار خود ادامه دهد،
بنابراین آن را با عنوان یک متد voidتنظیم کرده ایم .هیچ مقدار گزارش داده ای وجود ندارد.
متدها نیاز به مقادیری که به آنها منتقل شود ،ندارند .شما می توانید تنها چند کد را اجرا کنید .در اینجا یک
و در تصویر زیر متد intرا مشاهده می کنید که دارای هیچ مقداری برای انتقال نمی باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
139
همان طور که مشاهده می کنید پرانتزها در هر دو متد خالی هستند .اما هنوز الزم می باشند .اگر این پرانتزها
در بخش بعد در مورد فراخوانی و فعال کردن متدها فرا خواهید گرفت.
متدها تا زمانی که آنها را فرا نخوانده و وارد عمل نکنید ،کاری انجام نمی دهند .قبل از مشاهده ی چگونگی
انجام این کار ،اجازه بدهید گروه دیگری را به پروژه اضافه کنیم .به جای مسدود کردن گروه اصلی ،می توانیم
همه ی متدها را در آن قرا دهیم(.در مورد گروه ها در بخش بعد بیشتر فرا خواهید گرفت).
یک پروژه ی Java Applicationجدید آغاز کنید .پروژه ی خود را نام گذاری کرده و متد Mainنیز تغییر نام
دهید .سپس روی Finishکلیک کنید .در تصویر زیر پروژه ی خود را با عنوان prjmethodsو گروه را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
140
برای افزودن یک گروه جدید به پروژه ی خود ،از منوی NetBeansروی Fileکلیک کنید .از منوی Fileعبارت
New Fileرا انتخاب کنید .یک دیالوگ باکس برای شما ظاهر خواهد شد .در بخش Categoriesگزینه ی
Javaو در بخش File Typesگزینه ی Java Classرا انتخاب کنید .سپس روی دکمه ی Nextدر پایین
کلیک کنید .در مرحله ی دوم ،یک نام برای گروه جدید خود تایپ کنید .ما گروه خود را MyMethodsنام نهاده
ایم .شما می توانید هر چیز دیگری را به عنوان پیش فرض قرار دهید.
بنابراین ما یک گروه دوم به نام MyMethodsایجاد می کنیم که در پروژه ی prjmethodsخواهد بود .روی
دکمه Finishکلیک کنید و پس از آن فایل گروه جدید ایجاد خواهد شد .در نرم افزار NetBeansیک تب
جدید با کامنت های پیش فرض در مورد چگونگی تغییر الگوها ظاهر خواهد شد .اگر تمایل داشته باشید ،می
توانید این کامنت ها را حذف کنید .سپس پنجره ای با کد زیر برای شما ظاهر خواهد شد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
141
موردی که باید به آن توجه کنید این است که این بار متد Mainوجود ندارد – تنها با یک گروه خالی با نامی که
انتخاب کرده اید و یک جفت آکوالد برای کد شما .اجازه بدهید یکی از متدهای خود را اضافه کنیم .بنابراین کد
این متد intمی باشد که قبال با نام totalبه آن پرداختیم .در این متد چیزی بین پرانتزها مبنی بر اینکه قصد
توزیع هر مقداری بر روی آن نداریم ،وجود ندارد .تمام آنچه متد انجام می دهد افزودن 10 + 10و ذخیره ی
پاسخ در متغیری به نام a_Valueمی باشد .این مقداری است که از این متد بازگردانده خواهد شد .مقداری
که پس از لغت کلیدی گزارش شده است ،باید با نوع بازگشتی از تیتر متد هماهنگ باشد .در مورد مثال ما این
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
142
( این مسئله مهم می باشد که در ذهن داشته باشید که متغیر a_Valueدر خارج از متد totalدیده نمی
شود :هر متغیری که در داخل متد تنظیم شده باشد ،در خارج آن متد قابل دسترس نمی باشد .این متغیر با
برای فراخوانی متد totalتب TestMethodsرا در NetBeansانتخاب کنید ،موردی با متد Main.قصد داریم
اولین کاری که باید انجام شود ،ایجاد یک آبجکت جدید از گروه MyMethodsمی باشد .خط زیر را به متد
برای ایجاد یک آبجکت جدید از یک گروه ،با نام گروه آغاز کنید ،در مورد مثال ما گروه MyMethodsنامیده می
شود .این به جایString ،double ، intو غیره می باشد .به عبارت دیگر نوع متغیری که در حال ایجاد آن
هستید یک متغیر MyMethodsمی باشد .پس از یک فاصله ،یک نام برای متغیر جدید MyMethodsتایپ
کنید .ما مورد خود را test1نامیده ایم(.زیر این مورد خط کشیده شده ،زیرا هنوز با آن کاری نکرده ایم .این
یک عالمت تساوی بعد از آن قرار می گیرد که با لغت کلیدی newدنبال می شود که به معنای new objectمی
باشد .پس از لغت کلیدی newیک فاصله قرار دهید که مجددا با نام گروه شما دنبال می شود .این بار پس از
نام گروه نیاز به یک جفت پرانز دارید .خط را به روش معمول به پایان برسانید ،با یک نقطه ویرگرول
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
143
) (semi-colonآنچه در اینجا انجام داده ایم ،ایجاد یک آبجکت MyMethodsجدید با نام test1می باشد.
اکنون متد totalدر داخل گروه MyMethodsاز متد Mainمربوط به گروه TestMethodsدر دسترس خواهد
بود.
ما در حال تنظیم یک متغیر intبا نام aValمی باشیم .پس از عالمت تساوی نام گروه ما ،test1 ،قرار می گیرد.
برای دسترسی به متدها در گروه یک نقطه تایپ کنید . NetBeansجعبه ای را با متدهای موجود نمایش می
دهد.
متغیر totalدر لیست موجود می باشد ( دیگر متغیرها در متدها داخلی می باشند .).پرانتزها خالی هستند،
زیرا متد ما مقادیر را نمی پذیرد ،اما نوع بازگشتی ،int ،در سمت راست نمایش داده می شود .روی totalدابل
کلیک کنید تا آن را به کد خود اضافه کنید .سپس در انتهای خط یک نقطه ویرگول تایپ کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
144
بنابراین برای فراخوانی یک متد که یک مقدار را بازمی گرداند ،دقت کنید که چه نوع مقداری توسط متد شما
بازگردانده می شود .سپس این مقدار را به یک متغیر جدید اختصاص دهید ،در مورد ما این متغیر aValمی
باشد .اما وقتی که یک نقطه پس از نام آبجکت خود تایپ می کنید ،متد باید در دسترس باشد.
به هرحال اگر متد شما از نوع voidمی باشد ،نیازی به اختصاص دادن آن به متغیر جدیدی مانند aValنمی
باشد .به عنوان مثال به گروه MyMethodsخود بازگشته و متد voidرا که قبال بررسی کردید ،اضافه کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
145
این متد جدید print_textنامیده می شود .این متد نیز دارای پرانتزهای خالی می باشد که به آنها هیچ مقداری
اختصاص نمی دهیم .تمام کاری که این متد انجام می دهد چاپ کردن متن می باشد.
زمانی که متد voidرا اضافه کرده اید ،به گروه TestMethodsبازگردید و خط زیر را اضافه کنید.
) (test1.print_text
به محض اینکه نقطه را تلیپ کردید ،باید متد جدید را مشاهده کنید که روی لیست ظاهر می شود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
146
اما متدهای ما که اکنون روی لیست هستند عبارتند از totalو print_text.مقادیری که این متدها در سمت
از آنجایی که متد print_textیک متد خالی ) (voidمی باشد ،نیازی به تنظیم یک مقدار بازگشتی ندارید .تمام
آنچه نیاز دارید نام آبجکت ،یک نقطه )(dotو یک متد voidمی باشد که قصد فراخوانی آن را دارید .سپس
کد خود را اجرا کنید و پنجره ی Outputشما باید صفحه ای مانند زیر نمایش دهد.
در بخش بعد نگاه دقیق تری به انتقال مقادیر به متدها خواهیم داشت.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
147
شما می توانید مقادیر را به متدهای جاوای خود طوری انتقال دهید که با این مقدار کاری انجام شود .این مقدار
به گروه MyMethosخود بازگردید .اکنون دومین متد totalرا اضافه کنید.
اکنون دو متد هم نام داریم : total.تفاوت بین این دو این است که متد جدید دارای مقداری در بین پرانتزها
می باشد .جاوا اجازه ی این کار را به شما می دهد که method overloadingنامیده می شود .شما می توانید
هر تعداد متد هم نام که می خواهید با هر مقدار بازگشتی داشته باشید .به هرحال نمی توانید یک نوع متغیر
مشابه بین پرانتزها داشته باشید .بنابراین نمی توانید دو متد totalداشته باشید که مقادیر intرا بازمی
گرداند که هر دوی آنها دارای مقادیر intدر داخل پرانتزها هستند .به عنوان مثال نمی توانید این کار را انجام
دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
148
گرچه هر دو متد دو کار متفاوت انجام می دهند ،هر دو دارای تیترهای یکسان متد می باشند .قبل از اینکه متد
جدید خود را امتحان کنید ،چند کامنت مستقیما در باالی متد اضافه کنید.
مشاهده خواهید کرد که کامنتها در یک لحظه چگونه عمل می کنند .اما paramدر متدهای فوق مخفف
parameterمی باشد .یک پارامتر یک اصطالح تخصصی برای مقدار بین پرانتزهای تیترهای متد می باشد.
پارامتر ما aNumberنامیده می شود و این پارامتر دارای مقادیر صحیح می باشد .به استفاده ی کاراکتر @
تمام کاری که ما با خود متد انجام می دهیم ،انتقال یک مقدار صحیح و افزودن 20به این مقدار انتقالی می
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
149
به محض اینکه نقطه را بعد از آبجکت test1تایپ کردید ،لیست پیش رو دوباره مشاهده خواهید کرد .متد
جدید شما روی آن خواهد بود .روی متد جدید کلیک کنید تا آن را مشخص کنید و NetBeansمورد زیر را
اکنون کامنت های اضافه شده در باکس آبی در زیر لیست متدها نمایش داده می شوند .هرکس دیگری که
وارد متد شما شود ،باید قادر به تشخیص کاری که انجام می دهد ،باشد .خطوط @paramو @returnاز
اما زمانی که متد total2را اضافه می کنید ،عدد 30را بین پرانتزها تایپ کنید .سپس یک نقطه ویرگول در
انتهای خط تایپ کنید .اکنون متد اصلی شما باید مشابه زیر باشد.
30تایپ شده بین پرانتزهای متد جدید totalتحویل داده شده و در متغیر aNumberقرار می گیرد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
150
مثال
سپس برنامه ی خود را اجرا کنید .پنجره ی Outputصفحه ی زیر را نمایش می دهد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
151
بنابراین متد30 ، totalرا به 20اضافه کرده و سپس پاسخ را به متغیری به نام aVal2بازمی گرداند.
در بخش بعد ،در مورد چگونگی انتقال بیشتر از یک مقدار به متدهای خود را فرا خواهید گرفت.
classاضافه کنید.
تمام آنچه این متد انجام می دهد ،چاپ کردن یک مورد می باشد .بین پرانتزهای مربوط به نام متد ،دو مقدار
وجود دارد ،یک متغیر Stringبه نام aStringو یک متغیر intبه نام aVal.وقتی این متد را فرا می خوانیم،
ابتدا نیاز به رشته و سپس نیاز به یک عدد داریم .سعی کنید آن را به روش دیگری انجام دهید و پیغام خطا
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
152
مقادیری (پارامترها) که تعیین می کنیم ،همراه با متد بازگشتی ،void ،بین پرانتزها می باشند.
اما پنجره ی برنامه نویسی اصلی شما اکنون شبیه به تصویر می باشد.
دو مقداری که انتقال می دهیم ،توسط یک کاما مجزا می شوند .توجه داشته باشید که مقدار داخل aVal2
انتقال داده شده باشد .به هرحال نام متغیر داخل پرانتزهای print_textدر واقع aValمی باشد .گرچه نام
های دو متغیر متفاوت می باشند ،اما این مسئله مشکلی ایجاد نمی کند .آنچه شما انجام می دهید انتقال
مقادیر به متد می باشد .بنابراین متغیر aValبا همان مقدار aVal2به پایان می رسد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
153
اکنون اگر برنامه ی خود را اجرا کنید ،باید پنجره ی Outputزیر را مشاهده کنید.
ما متدها را رها می کنیم .همانطور که پیش می رویم ،متدهای بیشتری خواهیم نوشت ،بنابراین شما باید زیاد
تمرین کنید .بخش بعد در مورد گروه ها می باشد – برنامه نویسی آبجکت محور.
در این بخش چگونگی ایجاد آبجکت ها را فرا خواهید گرفت .یادگیری کالس ها را تقریبا در یخش قبل آغاز کرده
اید .اکنون به جزئیات بیشتری می پردازیم .در برخی موارد در مورد تفاوت بین یک آبجکت و کالس گیج می
شوید ،گرچه وقتی درمورد یک کالس صحبت می کنیم در واقع در مورد خود کد صحبت می کنیم ،کدی که کاری
انجام نمی دهد .وقتی کد را برای انجام کار فعال می سازید ،این کد یک آبجکت می باشد.
وقتی کالسی ایجاد می کنید ،یک کد برای انجام یک کار خاص می نویسید .این کار ممکن است مربوط به یک
کارمند باشد ،اما فروش شرکت نیز در همان زمان شکل نمی گیرد .برای آمار فروش باید یک کالس مجزا
بنویسید .به این روش می توانید از کالس کارمند ) (employeeدر یک پروژه ی دیگر استفاده کنید .آمار
وقتی که سعی دارید نظریه های خود را در کالس ها به کار برید ،باید مسئله ی برکناری را در ذهن داشته
باشید و از خود بپرسید " :آیا کدی در این کالس وجود دارد که نیازی به آن در اینجا نیست؟"
در مورد مثال مربوط به این بخش ،کالسی خواهیم نوشت که شامل چند تمرین خواهد بود .روی وب سایت ما
)(www.tahlildadeh.comچند امتحان وجود دارد که می توانید به رایگان به آنها دسترسی داشته باشید.
در یک زمان سوال داده می شود و هر امتحان دارای 50سوال می باشد .تمرین های مختلفی وجود دارند که می
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
154
توانید به آنها دسترسی داشته باشید .در مورد مثال ما ،سواالت را ساده می کنیم .نام شخصی که امتحان می
گیرد ،ایمکه کدام امتحان گرفته شده ،نمره از 50و یک درجه را ثبت می کنیم.
برای این مسئله یک پروژه ی جدید جاوا ایجاد کنید .پوشه ی examsرا فرا بخوانید و سپس نام متود را از
کالس دومی ایجاد خواهیم کرد تا داده ی امتحان را بررسی کنیم .بنابراین در NetBeansاز نوار منو روی File
کلیک کنید .از منوی Fileگزینه ی New Fileرا انتخاب کنید . Javaرا در لیست Categoriesو Java
Classرا در لیست File Typesمشخص کنید .سپس روی Finishکلیک کنید . NetBeansدر پروژه ی شما
یک کالس دوم ایجاد خواهد کرد .شما می توانید کامنت های پیش فرض را حذف کنید.
در بخش قبل در مورد متغیرهای داخل متدها صحبت کردیم .متغیرهایی که داخل متدها تنظیم می کنید ،تنها
در دسترس همان متدها می باشند و در متدهای دیگر قرار نمی گیرند ،گفته می شود که دارای دامنه ی داخلی
می باشند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
155
به هرحال می توانید متغیرهایی را در خارج از متدها تنظیم کنید که همه ی متدهای موجود در گروه شما می
توانند ببینند .این متغیرها ،متغیرهای( Fieldیا متغیرهای ) Instanceنامیده می شوند .می توانید آنها را
دقیقا به روش دیگر متغیرها تنظیم کنید .چهار فیلد زیر را گزوه جدید StudentResultاضافه کنید.
ما چهار رشته متغیر (چهار رشته فیلد) تنظیم می کنیم .همانطور که نام فیلدها نشان می دهد ،رشته حاوی نام
یک شخص ،نام یک امتحان ،یک نمره و یک درجه می شود .این چهار فیلد در دسترس همه ی متدهایی که در
این گروه نوشتیم ،قرار می گیرند و برای متدها داخلی نیستند .گفته می شود که دارای دامنه ی جهانی می
باشند.
برای اینکه چگونگی جهانی بودن آنها را مشاهده کنیم ،به گروه ExamDetailsخود بازگردید ،گروهی با متد
اصلی (main).برای ایجاد یک آبجکت جدید از گروه ، StudentResultsکد زیر را اضافه کنید.
این همان کاری می باشد که در بخش قبل انجام دادهیم – استفاده از یک لغت کلیدی جدید برای ایجاد یک
آبجکت جدید .نام آبجکت aStudentخواهد بود و از نوع StudentResultsمی باشد که گروه ماست.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
156
در خط بعدی نام متغیر ) (aStudentرا که با یک نقطه ) (dotدنبال می شود ،تایپ کنید .به محض اینکه نقطه
را تایپ کردیدNetBeans ،لیستی از متدها و پراپرتی های موجود در آبجکت شما را ارائه می دهد.
چهار فیلدی که تنظیم کردیم ،روی لیست قرار دارند .اینها متد نیستند ،بلکه چیزی به نام پراپرتی می باشند.
این واقعیت که آنها روی لیست هستند ،به این معناست که دارای دامنه ی جهانی می باشند .اگر دارای دامنه ی
شما می توانید مقادیری را برای پراپرتی ها تنظیم کنید .این مورد را امتحان کنید :کد مشخص شده ی زیر را به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
157
ما فیلد Exam_Nameرا از لیست انتخاب کرده ایم و به آن مقدار " "VB NETاختصاص داده ایم .سپس خط
بعدی مقدار Exam_Nameرا از آبجکت aStudentمی گیرد .نتیجه در متغیری به نام امتحان )(exam
ذخیره شده و سپس چاپ می شود .وقتی برنامه را اجرا می کنید ،خروجی رشته ی " "VB Netمی باشد.
بنابراین چهار متغیری که تنظیم کرده ایم ،در هر دو گروه در دسترس می باشند.
به هرحال جهانی ساختن متغیرهای فیلد ،مانند این مورد ،فکر خوبی نیست .شما تمایل به از دست دادن
پیگیری مقادیری را دارید که در این متغیرها می باشند ،بنابراین اشکال زدایی کد شما بسیار سخت تر می
شود .محدود کردن دامنه ی متغیرهای فیلد ،برنامه نویسی خوبی تلقی می شود.
برای اینکه یک متغیر فیلد تنها در دسترس یک گروه خاص باشد ،درست قبل از اعالم فیلد لغت کلیدی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
158
اکنون تنها کد موجود در گروه StudentResultsمی تواند این متغیرها را ببیند .برای بررسی به عقب ،به متد
اصلی خود بازگردید .باید چند اخطار و خطوط قرمز مشاهده کنید.
سه خط را در پایین حذف کنید . aStudentرا و سپس یک نقطه تایپ کنید تا لیست NetBeansرا مشاهده
کنید.
همانطور که مشاهده می کنید ،اکنون چهار متغیر فیلد محو شده اند .علت حذف آنها این است که دیگر دامنه ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
159
از آنجایی که متغیرهای فیلد را خصوصی ساخته ایم ،نیاز به راه دیگری برای اختصاص دادن مقادیر به آنها
داریم .یک راه برای انجام آن استفاده از (constructorسازنده) می باشد .این دروافقع متودی است که می
توانید برای تنظیم مقادیر اولیه ی متغیرهای فیلد استفاده کنید .وفتی آبجکت ایجاد می شود ،ابتدا جاوا
constructorرا فرا می خواند .سپس هر کدی که در این سازنده دارید ،اجرا می شود .نیازی به هیچگونه
فراخوانی خاصی به یک متود constructorندارید – در هنگام ایجاد یک آبجکت این اتفاق به طور خودکار انجام
می شود.
کنید.
بنابراین نام این ( Constructorسازنده) نیز StudentResultsمی باشد .این دقیقا همان نام گروه می
باشد .برخالف متودهای عادی ،گروه constructorها به نوع بازگشتی مانند intیا doubleو کال هیچ گونه
گزارشی نیاز ندارد .به هرحال شما می توانید مقادیر را به constructorهای خود انتقال دهید .اگر بخواهیم
مقادیر را به متغیرهای فیلد انتقال دهیم ،می توانیم مانند زیر عمل کنیم.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
160
در اینجا دو متغیر Stringبه پرانتزهای constructorاضافه کرده ایم .در داخل پرانتزها این مقادیر را به
فیلدهای Full_Nameو Exam_Gradeاختصاص داده ایم .وقتی که یک آبجکت جدید ایجاد می کنید ،نیاز
مثال
وقتی آبجکت ایجاد می شود ،مقادیر " "Bill Gatesو ""Aدر constructorبررسی می شوند.
به هرحال تنظیم چند مقدار پیش فرض برای متغیرهای فیلد فکر خوبی است .این مقادیر در هنگام ایجاد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
161
اکنون هر وقت یک آبجکت StudentResultsجدید ایجاد می شود ،هر چهار متغیر فیلد ما دارای مقدار پیش
فرض می باشند .دقت کنید که اکنون هیچ چیز بین پرانتزهای گروه constructorوجود ندارد.
اکنون که چند مقدار پیش فرض داریم ،می توانیم متدی را اضافه کنیم که مقادیر مختلفی را برای آنها تنظیم
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
162
این متد جدید fullNameنامیده می شود و دارای یک متغیر Stringجدید به نام aNameبین پرانتزهای آن
می باشد .این متد کار بزرگی انجام نمی دهد و به خاطر سادگی در اینجاست .می توانستیم متدی داشته باشیم
که کارهای بیشتری انجام دهد ،از جمله چک کردن خطاها ،اطمینان حاصل کردن در رابطه با یک مورد مناسب،
بررسی رشته های خالی و غیره .اما نکته ی مهم این است که این متد برای فیلد Full_Nameیک مقدار تنظیم
می کند و این فیلد را به عنوان یک مقدار باز می گرداند .وقتی این متد را فرا می خوانیم ،مقدار پیش فرض را
برای Full_Nameخواهد نوشت و یک مقدار جدید وارد خواهد کرد .هر آنچه در متغیر aNameاست ،مقدار
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
163
آنچه در اینجا انجام می دهیم ،فراخوانی متد fullNameاز آبجکت aStudentمی باشد .ما در حال توزیع
مقدار " "Bill Gatesمی باشیم .این مقدارمربوط به فیلد Full_Nameنیز خواهد بود ( .این مقدار می
توانست برای خطاها بررسی شده ،اصالح شود و سپس در یک فیلد ذخیره شود ).سپس مقدار Full_Name
درست مانند متدهایی که در بخش قبل ایجاد کردیم ،گرچه متد fullNameروی لیست NetBeansمی باشد.
برای امتحان آن کد خود را اجرا کنید .پنجره ی Outputباید صفحه ی زیر را نمایش دهد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
164
بنابراین آنچه انجام داده ایم امتحان کردن یک مقدار برای یک متغیر فیلد در یک گروه به نام
حاال اجازه بدهید متدی وارد کنیم که واقعا کار مفیدی انجام می دهد .کاری که انجام خواهیم داد این است که
به یک یوزر اجازه می دهیم تا یک کد امتحان دو حرفی وارد کند .سپس آن دو حرف را به متدی انتقال خواهیم
داد که دو حرف را به نام یک امتحان بازمی گرداند .برای مثال اگر یک یوزر دو حرف " "VBرا وارد کند ،متد
رشته ی " "Visual Basic .NETرا گزارش خواهد داد .رشته ی بلندتر در متغیر فیلد Exam_Nameذخیره
خواهد شد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
165
متد examNameدارای یک متغیر رشته به نام examCodeمی باشد که بین پرانتزهای آن قرار می گیرد.
این رشته آن دو حرف می باشد .خطوط IF … ELSE IFبررسی می کنند تا ببینند کدام دو حرف در رشته می
باشند .اگر یک هماهنگی برای دو دو حرف پیدا کردیم ،تیتر بلندتر در فیلد Exam_Nameقرار می گیرد .اگر
هیچ گونه هماهنگی پیدا نشد ،متن مربوط به فیلد " "No Exam Selectedخواهد بود.
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
166
دوباره ما در حال فراخوانی متد می باشیم .به حروف " "VBدسترسی داریم .متد مقدار "Visual Basic
".NETرا گزارش می دهد و سپس آن را در متغیر رشته ای که آن را examنامیدیم ،ذخیره می کند .یک
print lineجدید اضافه کنید ،کد شما باید مانند زیر باشد.
این درس را در بخش بعد ادامه خواهیم داد ،که صفحه کمی بلندتر می شود.
متد جدید زیر را درست بعد از متد examNameدر گروه خود اضافه کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
167
این متد جدید examScoreنامیده می شود با یک متغیر intبه نام aScoreبین پرانتزهای آن .این متد برای
بازگرداندن یک مقدار Stringتنظیم شده است .خود متد نمره را با رشته ی " " out of 50ترکیب می کند.
بنابراین اگر مقدار در aScoreعدد 30باشد ،متن " out of 50" 30در فیلد Exam_Scoreذخیره خواهد
شد.
مثال
بنابراین متد جدید examScoreرا فرا می خوانیم و به آن مقدار 30را می دهیم .مقدار در فیلد
Exam_Scoreبازگردانده می شود ،و سپس در یک متغیر رشته ذخیره می شود که ما آن را نمره )(score
نامیده ایم.
یک متد print lineجدید اضافه کنید ،بنابراین کد شما شبیه به کد ما در زیر می شود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
168
بنابراین ما نام دانش آموز ،نام امتحان و نمره از 50را در دست داریم .اکنون به پنجره ی خروجی می توانیم یک
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
169
برای درجه از حروف مجزا استفاده می کنیم ،D ،B, C ،: Aیا E.اگر دانش اموزی نمره ی 41یا بیشتر بگیرد،
حرف Aرا به آن اختصاص می دهیم .اگر نمره بین 31و 40باشد ،درجه مربوطه Bخواهد بود .برای نمره ی بین
21تا 30حرف Cاختصاص داده می شود .درجه ی Dنمره ی بین 11تا 20می باشد و حرف Eبرای نمرات بین
برای محاسبه ی درجات باال متد زیر را اضافه کنید (.آن را به گروه StudentResultsخود اضافه کنید)
دقت داشته باشید که این متد (privatخصوصی) می باشد .درست مانند متغیرهای فیلد ،خصوصی ساختن
یک متد به این معناست که آن متد تنها در داخل این گروه قابل مشاهده می باشد و می تواند به وسیله ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
170
برای به دست آوردن درجه ،متد دیگری را در داخل گروه StudentResultsتنظیم خواهیم کرد و از آن برای به
دست آوردن درجه استفاده می کنیم .متد زیر را درست در باالی متد getGradeاضافه کنید(.گرچه اگر تمایل
داشته باشید ،می توانید آن را در زیر این متد نیز اضافه کنید :در جاوا هیچ فرقی نمی کند)
مثال
این متدی است که به جای متد getGradeاز گروه ExamDetailsفرا خوانی می کنیم .نام این متد جدید
examGradeمی باشد و مجددا آن را به نمره ی دانش آموز انتقال می دهیم .به این خط دقت کنید.
مثال
در اینجا متد getGradeفراخوانده می شود و آن را به نمره ای انتقال می دهیم که توزیع شده بود .فراخوانی
یک متد از متد دیگر یک تمرین استاندارد می باشد ،و به شما اجازه می دهد تا کد خود را ساده کنید .جایگزین
آن داشتن متدهای خیلی بلند می باشد که خواندن آنها سخت است.
مورد دیگری که در خط باال باید به آن توجه داشت لغت کلیدی thisدر جاوا می باشد .لغت کلیدی thisبه
معنای " "this classمی باشد و نه گروه دیگری که ممکن است دارای متد هم نام باشد .این امر از هر گونه
سردرگمی جلوگیری می کند .این مسئله زیاد ضروری نیست و می توانید آن را نادیده بگیرید .فراخوانی متد
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
171
گرچه نتیجه ی نهایی هنوز همان است :ما در حال ذخیره سازی چیزی در فیلد متغیر Exam_Gradeمی باشیم
و آن عبارت خواهد بود از عبارت " "Grade isبه عالوه ی یک حرف مربوط به درجه.
برای امتحان کردن متدهای جدید ،خط زیر را به گروه ExamDetailsاضافه کنید.
مثال
این خط مقداری برابر 30را به متد examGradeمی دهد .سپس در فیلد متغیر Exam_Gradeمقداری
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
172
اگر برنامه ی شما به درستی کار نمی کند ،در اینجا کد کامل مربوط به گروه StudentResultsرا مشاهده می
کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
173
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
174
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
175
مفهوم مهم دیگر در برنامه نویسی ( Object Orientedآبجکت محور) مفهوم Inheritanceمی باشد .با چند
مثال برنامه نویسی مفهوم Inheritanceواضح تر خواهد شد .اما لزوما دارای یک گروه به عنوان گروه اصلی
می باشد ( که گروه superنامیده می شود ).و یک گروه دیگر به عنوان زیرمجموعه ی گروه اصلی (که گروه
subنامیده می شود).گفته می شود که گروه زیرمجموعه از گروه اصلی استخراج شده است .دلیل داشتن یک
گروه زیرمجموعه حفظ اطالعات به صورت مجزا می باشد .گروه زیرمجموعه می تواند تمام متدها و فیلدها را از
گروه اصلی خود دریافت کند ،اما سپس می تواند کار خود را انجام دهد.
به عنوان یک مثال از ، inheritanceیک گروه زیرمجموعه ایجاد خواهیم کرد که اطالعات مربوط به تاییدیه ها را
بررسی می کند .اگر دانش آموزی رتبه ی ""Aدریافت کند ،گواهی Excellence Certificate of Excellence
به او اعطا خواهیم کرد ،اگر دانش آموزی رتبه ی " "Bدریافت کند ،به او گواهی دستاورد (Certificate of
) Achievementاعطا خواهیم کرد .برای هر رتبه ی دیگری هیچ گواهی اعطا نمی گردد .اما نکته ی مربوط به
گروه زیرمجموعه ،نگهداری جدا از هم داده ی مربوط به گواهی و داده ی مربوط به امتحان می باشد .به هرحال
ممکن است تمتیل داشته باشیم به اطالعاتی در مورد امتحان دسترسی داشته باشیم ،اطالعاتی از قبیل
امتحانی که برگزار شده بود .حتی می توانیم به متدهایی دسترسی داشته باشیم که یک نمره را به رتبه تبدیل
بنابراین با کلیک کردن بر روی File > New Fileاز منوی NetBeansیک گروه جدید ایجاد کنید .وقتی که
دیالوگ باکس ظاهر می شودJava ،را در زیر تیتر Categoriesو Java Classرا زیر File Typesکلیک
کنید .روی Nextکلیک کرده و Certificatesرا به عنوان نام گروه جدید خود وارد کنید .روی Finishکلیک
کنید.
وقتی که گروه جدید شما ایجاد شده است ،یک فیلد خصوصی Stringوارد کرده و آن را certificateبنامید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
176
برای ایجاد یک ( sub classزیرمجموعه) از گروه اصلی جاوا ، super classلغت کلیدی extendsاستفاده می
شود .بنابراین لغت کلیدی " "extendsگروه اصلی مورد نظر را که می خواهید گسترش دهید ،دنبال می کند.
پس از " "public class Certificatesدر کد خود " "extends StudentResultsرا اضافه کنید .بنابراین کد
درست مانند گروه ، StudentResultsمی توانیم برای این گروه Certificatesجدید یک سازنده
) (constructorایجاد کنیم .وقتی که از گروه یک آبجکت ایجاد می کنیم ،اول از همه جاوا سازنده ی ما را فرا
می خواند.
به هرحال تنها یک سازنده می تواند فرا خوانده شود .اگر یک سازنده ی جدید را از گروه Certificatesفرا
بخوانیم ،همه ی آن مقادیر پیش فرض که برای فیلدهای گروه StudentResultsتنظیم کردیم ،تنظیم
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
177
نخواهند شد .برای رسیدن به این ،یک لغت کلیدی به نام superوجود دارد .این لغت از گروه اصلی به سازنده
نام سازنده هم نام با گروه می باشد : Certificates.اولین خط کد بین پرانتزها گروه اصلی می باشد( به
پرانتزهای بعد از superتوجه کنید .).وقتی که این خط اجرا می شود ،همه ی فیلدهای پیش فرض برقرار شده
خط دوم کد در سازنده یک مقدار پیش فرض به نام certificateبرای فیلد Stringتنظیم می کند(.شما در
واقع می توانید بیشتر از یک سازنده تنظیم کنید .چگونگی انجام این کار را در بخش های بعد مشاهده خواهید
کرد)
برای امتحان کردن گروه جدید خود ،به گروه ExamDetailsبازگردید ،گروهی با متد main.روی هر کدی که
تاکنون داشته اید ،کامنت بگذارید .یک راه سریع برای انجام این کار های الیت کردن تمام کد و سپس کلیک
برای رهایی از کامنت ها ،دوباره کد را های الیت کرده و روی آیکن uncommentکلیک کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
178
اکنون برای ایجاد یک آبجکت جدید از گروه خود ،خط زیر را اضافه کنید.
مثال
برای بررسی این موضوع که می توانید به متدهایی از گروه StudentResultsدسترسی داشته باشید ،خط زیر
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
179
این درست همان کاریست که قبال انجام دادید :فراخوانی متد examNameاز گروه StudentResults .به
یک print lineاضافه کنید ،کد شما باید به شکل زیر باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
180
بنابراین متد مربوط به گروه اصلی ) (the super classبه عمل فرا خوانده شده است .اکنون می توانیم یک
متد به گروه زیر مجموعه اضافه کنیم (the sub class).متد زیر را به گروه Certificatesخود اضافه کنید،
این متد certificateAwardedنامیده می شود و برای بازگرداندن یک مقدار Stringتنظیم شده است .در
داخل پرانتزهای مربوط به متد ،یک نمونه ی نمره ی آزمون توزیع می کنیم.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
181
مثال
متد examGradeیک متد در گروه اصلی می باشد و متدی می باشد که در StudentResultsتنظیم کردیم.
به یاد داشته باشید که این متد برای بازگردانی یک رتبه و عباراتی مانند""Grade is B" ، "Grade is Aو
غیره تنظیم شده بود .اکنون آن را از زیرمجموعه فرا می خوانیم . IF Statementمقدار مربوط به رشته ی
aGradeرا برای مشاهده ی آنچه در آن است ،بررسی می کند .بسته به مقدار ،یک رشته ی جدید بازگردانده
می شود ویک تاییدیه ی مشخص به آن اختصاص داده می شودAchievement ،: Excellenceیا بدون
تاییدیه.
مثال
این خط متد جدید را فرا خوانده و به آن مقدار 50اختصاص می دهد .نتیجه به رشته ای که awardنامیده
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
182
بنابراین برای نگهداری جزئیات آزمون جدا از جزئیات مربوط به گواهی ،از Inheritanceاستفاده کرده ایم .گروه
زیرمجموعه به متدهای گروه اصلی خود دسترسی دارد .بنابراین ما قادر به گرفتن خروجی از هر دو هستیم.
بنابراین Inheritanceنمایش فواید گروه اصلی می باشد .شما می توانید با قرار دادن داده در یک گروه
زیرمجموعه ،آن را مجزا نگه دارید .اما زیرمجموعه به نحوی در ارتباط با گروه اصلی می باشد و می تواند به تمام
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
183
در حالت کلی خطاها در دو دسته قرار می گیرند :خطاهای طراحی زمان )(Design-timeو خطاهای منطقی
(Logical ).متوقف کردن خطاهای Design-timeآسان می باشد ،زیرا NetBeansزیر آنها خط می کشد .اگر
خطا مانع اجرای برنامه شودNetBeans ،زیر آن را با قرمز خط می کشد .خطاهای Logicalخطاهایی هستند که
شما به عنوان یک برنامه نویس ایجاد می کنید .برنامه اجرا خواهد شد ،اما از آنجایی که شنا در برنامه نویسی
اشتباه کرده اید ،باعث می شود که کل برنامه دچار مشکل شود .به طور مختصر مثال هایی از خطاهای زمان اجرا
را مشاهده خواهید کرد .همچنین چگونگی بررسی آنها را نیز فراخواهید گرفت .اما ابتدا به چگونگی رسیدگی
استثنائات)(Exceptions
در جاوا خطاها توسط یک آبجکت Exceptionمورد بررسی قرار می گیرند .گفته می شود که Exceptionوارد
می شوند و کار شما گرفتن آنها می باشد .شما می توانید این کار را با بلوک try … catchانجام دهید .بلوک
مثال
{ try
}
{ ) catch ( ExceptionType error_variable
}
قسمت tryاز try … catchبه معنای امتحان کردن این کد می باشد .اگر اشتباهی رخ دهد ،جاوا وارد بخش
catchمی شود .در این بخش جاوا موارد بین پرانتزها را بررسی می کند تا رسیدگی به خطاها را کنترل کند .اگر
نوع اصالح سازی Exceptionرا داشته باشید ،هر موردی که بین کروشه های catchمی باشد ،اجرا خواهد
شد .اگر نوع اصالح سازی Exceptionرا نداشته باشید ،جاوا از مورد پیش فرض برای نمایش یک پیغام خطا
استفاده می کند.
به عنوان مثال ،یک برنامه ی جدید کنسول ) (console applicationایجاد کنید .آن را هر چه میلید نام
مثال
{ try
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
184
;int x = 10
;int y = 0
;int z = x / y
}
}
در بخش tryاز ، try … catchسه عدد صحیحy ، xو zرا تنظیم کرده ایم .سعی داریم yرا به xتقسیم کنیم و
اگر اشتباهی رخ بدهد ،بخش catchموجود می باشد .بین پرانتزهای این بخش عبارت زیر موجود می باشد.
Exception err
نوع Exceptionکه استفاده می کنید ،در ابتدا قرار می گیرد .در این مورد از آبجکت Exception error
استفاده می کنیم .این آبجکت یک نوع " "catch allاز Exceptionمی باشد و تمرین خوبی برای برنامه نویسی
پس از نوع Exceptionخود ،یک فاصله و سپس نام یک متغیر را دارید .ما متغیر خود را errنامیده ایم ،اما
در کروشه های ، catchیک عبارت چاپ داریم .اما به آنچه بین پرانتزهای printlnوجود دارد دقت کنید.
) (err.getMessage
getMessageمتودی است در دسترس آبجکت های Exception .همانطور که از نام آن پیداست ،پیغام خطای
برنامه ی خود را اجرا کرده و آن را امتحان کنید .کد شما باید مشابه کد زیر باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
185
مثال
run:
/ by zero
/ by zero
به عبارت دیگر یک تقسیم به وسیله ی خطای صفر .جاوا به شما اجازه ی تقسیم عدد به صفر را نمی دهد ،از
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
186
بقیه ی کد بدون تغییر می باشند .برنامه ی خود را اجرا کرده و آن را امتحان کنید.
مجددا یک پیغام خطا در پنجره ی Outputنمایش داده خواهد شد که به شکل زیر می باشد.
مثال
run:
Infinity
این بار به خاطر اینکه نتیجه یک عدد خیلی بزرگ می باشد ،جاوا برنامه را متوقف خواهد کرد.
خطاهایی که شامل اعداد می شوند ،نباید توسط یک نوع "catch all" Exceptionبررسی شوند .یک نوع خاص
به نام ArithmeticExceptionوجود دارد .لغت Exceptionرا از بین پرانتزهای بلوک catchحذف کنید .
نباید تفاوتی با خطای نمایش داده شده در پنجره ی Outputمشاهده کنید .اما با محدود کردن نوع خطای مورد
در جریان عادی یک برنامه ،وقتی ماشین مجازی جاوا ) (Java Virtual Machineدر حال اجرای کد شما می
باشد ،یک متد بعد از دیگری اجرا خواهد شد که با متد mainآغاز می شود .وقتی در ابتدای صف برنامه نویسی
نوبت به یک متد رسیده باشد ،گفته می شود که متد در راس stackمی باشد .پس از اینکه تمام متد اجرا می
شود ،از stackگرفته شده تا متد دیگر در صف متدها جایگزین آن شود .برای توضیح اصول ،کد برنامه ی خود
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
187
اکنون یک متد Mainو دو متد دیگر در دست داریم که عبارتند : m1و m2.وقتی که در ابتدا برنامه آغاز می
شود ،متد Mainدر باالی stackمی باشد .به هرحال در داخل متد Mainیک فراخوانی برای متد m1وجود
دارد .وقتی که این متد فراخوانده می شود ،در باالی stackقرار می گیرد .پس از آن متد m1متد m2را فرا
می خواند .وقتی که متد m2فراخوانده می شود ،در باالی stackقرا گرفته و m1را به طور موقت کنر می
گذارد .پس از اتمام ، m2کنترل دوباره به m1بازمی گردد .وقتی m1تمام می شود ،در باالی stackخاموش
برنامه ی خود را اجرا کرده و پنجره ی Outputرا بررسی کنید تا موارد چاپ شده را مشاهده کنید
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
188
اگر در متد m2اشتباهی رخ دهدJVM ،به جستجوی هرگونه کنترل خطا می پردازد ،از جمله یک گروه … try
catch.اگر هیچگونه کنترل خطایی وجود نداشته باشدException ،به m1تحویل داده خواهد شد تا
رویارویی آن با خطا را مشاهده کنید .در m1هیچگونه بررسی خطایی وجود ندارد ،بنابراین مجددا Exception
به stackمنتقل می شود ،این بار به متد Mainمنتقل می شود .اگر متد Mainبا Exceptionهماهنگ
نباشد ،یک پیغام خطای عجیب در پنجره ی Outputدریافت خواهید کرد .به عنوان یک مثال متد m2را با مورد
مثال
متد دوباره حاوی خطای تقسیم بر صفر می باشد .اکنون کد شما باید مشابه کد ما در زیر باشد.
آنچه مشاهده می کنید stack traceنامیده می شود .سه خط آبی که زیر آنها خط کشیده شده به متد شما و
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
189
package_name.class_name.method_name
مورد باال جایی است که ابتدا خطا در آن اتفاق می افتد ،در m2.جاوا در جستجوی این مورد بود تا توسط یک
ArithmeticExceptionکنترل شود که جایی است که در آن تقسیمات بر صفر گرفته می شوند .درm2 ، m1
و یا mainهیچ بررسی خطایی وجود نداشت .بنابراین برنامه به کنترل کننده ی خطای پیش فرض خروجی می
دهد.
مثال
{ try
;) (m2
}
}
اکنون متد m2را در یک بلوک tryقرار داده ایم .در بخش catchاز نوع Exceptionاستفاده کرده ایم که در
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
190
دقت داشته باشید که پیغام خطا با عنوان " "/ by zeroچاپ شده است .تمام متد m2اجرا نشد ،اما در جایی
که خطا اتفاق افتاد ،متوقف شد .سپس کنترل به m1بازگردانده شد .از آنجایی که یک بلوک catchبرای
رسیدگی به خطا وجود داشتJVM ،نیازی به کنترل کننده ی پیش فرض ندید ،اما پیغام را بین کروشه های
catchچاپ کرد.
به هرحال خود برنامه متوقف نشد .کنترل به متد Mainبازمی گردد که در آن متد m1فراخوانده می شود .خط
آخر در متد Mainکه " "End Main methodرا چاپ کرده ،اجرا شد .این برنامه تاثیرات مهمی دارد .فرض
کنید که شما به مقداری از m1نیاز داشتید ،زیرا تصمیم داشتید با آن در Mainکاری انجام دهید .مقدار در
آنجا نیست و ممکن است برنامه ی شما به شکلی که انتظار می رود رفتار نکند.
اما اگر در پنجره ی Outputیک stack traceمشاهده می کنید ،به یاد داشته باشید که اولین خط جایی است
که مشکل در آن اتفاق افتاد .بقیه ی خطوط جایی است که Exceptionبه stackتحویل داده می شود ،که
خطاهای منطقی خطاهایی هستند که شما به عنوان یک برنامه نویس دچار آنها می شوید ،وقتی کد به شکلی که
انتظار دارید اجرا نمی شود .بررسی این خطاها ممکن است دشوار باشد .خوشبختانه NetBeansدارای ابزار
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
191
با استفاده از برنامه ای که دارید یا با شروع یک پروژه ی جدید ،آن را برای خود تایپ کنید .کاری که در اینجا
سعی داریم انجام دهیم شمردن حرف gدر لغت " "Debuggingمی باشد .مشخصا پاسخ 3می باشد .به
هرحال وقتی برنامه را اجرا می کنید ،پنجره ی Outputعبارت زیر را چاپ می کند.
بنابراین ما جایی در کد خود خطایی انجام داده ایم .اما کجا؟ برنامه خوب اجرا می شود و هیچ Exceptionsبرای
برای بررسی مشکالت مربوط به کد خودNetBeans ،به شما اجازه ی اضافه کردن چیزی به نام Breakpointرا
می دهد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
192
از منوی ، NetBeansروی Debug > Debug errorhandling2کلیک کنید ( یا هر آنچه پروژه ی خود را
نامیده اید .). NetBeansوارد breakpointخواهد شد .این برنامه حاال اجرای کد را متوقف کرده است.
سه دکمه ی اول به شما اجازه ی متوقف کردن کامل یا موقت و ادامه دادن بخش عیب زدایی ) (debuggingرا
می دهد .پنج دکمه ی دیگر اجازه ی وارد شدن به کد ،رد شدن از کد ،خروج از کد یا رسیدن به مکان نما می
دهد.
می توانید با فشار دادن دکمه F5ادامه دهید .کد با Breakpointنیز باید مانند قبل طبیعی اجرا شود.
وقتی بخش عیب زدایی به پایان می رسد ،در Breakpointروی backکلیک کنید تا از آن رهایی یابید .اکنون
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
193
اکنون روی Debug > New Watchکلیک کنید .یک Watchبه شما اجازه ی پیگیری آنچه در یک متغیر است
را می دهد .بنابراین حرف Iدر دیالوگ باکس Watchتایپ کرده و روی OKکلیک کنید.
یک Watchدیگر اضافه کرده و سپس single_letterرا تایپ کنید .روی OKکلیک کنید . Watchسوم را
اضافه کرده و LetterCountرا تایپ کنید .شما باید سه متغیر زیر را در پایین صفحه ی خود داشته باشید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
194
یا فقط دکمه ی F7را فشار دهید .به فشار دادن دکمه ی F7ادامه دهید تا مشاهده کنید در پنجره ی Watch
چه اتفاقی می افتد .باید متوجه شده باشید که متغیر iهر بار 1واحد افزایش می یابد .اما دو متغیر دیگر
از آنجایی که در متغیر تک حرفی چیزی وجود ندارد ،بنابراین LetterCountنمی تواند بیشتر از صفر باشد.
بنابراین مشکل خود را یافته ایم – استفاده از یک رشته ی زیرمجموعه ) (substringممکن است اشتباه باشد،
بخش عیب زدایی را متوقف کنید و خط رشته ی زیر مجموعه ) (substringرا مانند زیر تغییر دهید.
اکنون عیب زدایی را دوباره آغاز کنید .به فشار دادن دکمه ی F7ادامه دهید تا روی خطوط مربوط به for loop
بروید .این بار باید تغییر متغیرهای sinle_letterو LetterCountرا مشاهده کنید.
وقتی کد به پایان می رسد ،باید پنجره ی Outputرا مشاهده کنید که عبارت زیر را نمایش می دهد.
بنابراین اگر موارد طوریکه با کد شما طراحی شدند ،پیش نمی روند ،تنظیم یک Breakpointو چند Watchرا
برای متغیرهای خود امتحان کنید .سپس یک بخش اشکال زدایی را آغاز کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
195
در بخش بعد به بررسی یک موضوع متفاوت خواهیم پرداخت :چگونگی باز کردن فایل های متن در جاوا.
مورد چگونگی باز کردن و نوشتن یک فایل متن فرا خواهید گرفت .اما منظور ما از فایل متن فایلی با متن داخل
آن می باشد – متن ساده .می توانید در ویندوز کامپیوتر در برنامه هایی مانندTextEdit ، Notepadدر، Mac
اولین کاری که انجام خواهیم داد باز کردن یک فایل متن و خواندن محتوای آن می باشد.
;import java.io.IOException
برای مقابله با اشتباهات ،عبارت زیر را به متود اصلی اضافه کنید) متن در حالت boldنوشته شده است(:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
196
ما به جاوا می گوییم که متود اصلی ) (mainخطای IOExceptionرا ایجاد می کند و اینکه این برنامه باید با
آن مقابله کند .بعدها برای نمایش یک پیغام خطای مناسب برای یوزر بلوک try … catchرا اضافه می کنیم،
برای باز کردن فایل متن اجازه بدهید یک گروه جدید ایجاد کنیم .بنابراین از منوی NetBeansدر باال روی
File > New Fileکلیک کنید .یک فایل جدید Java Classایجاد کرده و آن را ReadFileبنامید .وقتی این
گروه جدید ایجاد شد ،سه عبارت مهم زیر را اضافه کنید:
;import java.io.IOException
;import java.io.FileReader
;import java.io.BufferedReader
)زیر خطوط وارد شده خط کشیده شده است ،زیرا هنوز با آنها هیچ کاری انجام نداده ایم .این یک ویژگی
NetBeansمی باشد(.
از این گروه یک آبجکت جدید برای خواندن یک فایل ایجاد می کنیم .سازنده ی )(constructorزیر را به همراه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
197
تمام کاری که در اینجا انجام می دهیم ،انتقال به نام یک فایل و سپس توزیع نام فایل به مسیر فیلد می
باشد.
اکنون کاری که الزم است انجام دهیم ایجاد متودی است که تمام خطوط کد را از فایل متن باز می گرداند .این
خطوط در یک ردیف حفظ می شوند .بیانیه ی زیر را که فایل را باز می کند ،اضافه کنید:
نگران خطوط قرمز نباشید :این خطوط با اضافه کردن کد جدید از بین خواهند رفت . NetBeansآن را به این
دقت کنید که متود بر اساس بازگرداندن یک String arrayاز طریق زیر تنظیم شده است:
] [public String
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
198
همچنین دقت کنید که به انتهای تیتر متود عبارت " "throws IOExceptionرا اضافه کرده ایم .هر متودی که
مربوط به خواندن فایل های متن می شود به یکی از این موارد نیاز دارد .جاوا هر خطایی را در باالی خط وارد می
برای خواندن کاراکترهای فایل متن FileReaderاستفاده می شود .این برنامه بایت ها را از یک فایل می
خواند که هر بایت یک کاراکتر مجزا می باشد .شما می توانید به جای خواندن کاراکترهای مجزا ،تمام متن را
بخوانید .برای انجام این کار می توانید FileReaderرا در جایی به نام BufferedReaderتوزیع کنید .
BufferedReaderدارای متودی به نام ReadLineمی باشد .همانطور که از نام این متود پیداست ،برای
خواندن تمام خطوط و نه برای کاراکترهای مجزا استفاده می شود .آنچه BufferedReaderانجام می دهد،
ذخیره کردن کاراکترها در حافظه ) (bufferمی باشد طوری که به سادگی قابل اجرا باشند.
در اینجا در حال ایجاد دو آبجکت هستیم :یکی آبجکت FileReaderمی باشد که ما frنامیده ایم؛ دیگری نیز
FileReaderبرای باز کردن نیاز به نام فایل دارد .برای ما ،مسیر و نام فایل در متغیر فیلد به نام path
نگهداری می شود.
BufferedReaderآبجکت FileReaderخود را پرانتزها قرار می دهد .همه ی کاراکترهای فایل نیز در حافظه
نگهداری می شوند که منتظر اجرا می باشند .آنها تحت عنوان نام متغیر textReaderحفظ می شوند.
قبل از اینکه بتوانیم خطوط متن را بخوانیم ،نیاز به تنظیم یک arrayداریم .هر موقعیت در arrayنیز می تواند
یک خط کامل از متن را در خود حفظ کند .بنابراین دو خط زیر را به کد خود اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
199
مثال
اکنون تعداد خطوط فایل متن را فقط تا 3تنظیم خواهیم کرد .واضح است که فایل های متن می توانند هر تعداد
خط را در خود داشته باشند ،و معموال ما تعداد را نمی دانیم .بنابراین این مسئله را خیلی زود تغییر خواهیم داد
و یک متود مجزا خواهیم نوشت که تعداد خطوط را در یک فایل متن به دست می آورد.
دومین خط از کد جدید یک String arrayتنظیم خواهد کرد .تعداد موقعیت های یک ( arrayاندازه ی آن) ،به
تعداد خطوط تنظیم می شود .این عدد را بین کروشه قرار می دهیم.
برای قرار دادن تمام خطوط فایل در موقعیت های مختلف یک ، arrayنیاز به یک loopداریم . Loopهر خط از
مثال
;int i
;)(textData[ i ] = textReader.readLine
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
200
for loopاز 0شروع می شود و تا کمتر از خطوط خطوط می باشد ( .به یاد داشته باشید که موقعیت های array
ها در 0شروع می شوند .سه خط در موقعیت های 1 ،0و 2ذخیره خواهند شد(.
خطی که به خطوط متن دسترسی یافته و آنها را در یک arrayذخیره می کند ،خط زیر می باشد:
;) (textReader.readLine
آبجکت textReaderرا که تنظیم کزده ایم ،تمام کاراکترهای فایل متن را در حافظه ) (the bufferحفظ می
کند .می توانیم از متود readLineبرای خواندن یک خط کامل از حافظه استفاده کنیم .پس از خوانده شدن خط،
]textData[i
متغیری به نام iهر بار loopرا افزایش خواهد داد ،بنابراین وارد کل خطوط ذخیره شده ی متن در arrayمی
شود.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
201
اکنون فقط دو خط دیگر از کد باید به متود اضافه شوند .بنابراین این خطوط را به کد خود اضافه کنید:
;) (textReader.close
;return textData
خط گزارش شده ،تمام arrayرا گزارش می دهد .دقت کنید که برای نام arrayنیازی به کروشه نیست .وقتی
کد را اضافه کرده اید ،تمام خطوط زیر کد باید محو شوند و متود شما باید شبیه به تصویر زیر باشد :
به هرحال هنوز مشکل تعداد خطوط وجود دارد .در اینجا این را به 3تنظیم کرده ایم .آنچه نیاز داریم این است
که وارد فایل متن شده و خطوط آن را بشمریم .بنابراین متود زیر را به گروه ReadFileاضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
202
متد جدید readLinesنامیده می شود و طوری تنظیم شده تا یک مقدار صحیح گزارش دهد .این عدد صحیح
تعداد خطوط یک فایل متن می باشد .دقت کنید که این متود دارای یک بخش IOExceptionدر تیتر متود می
باشد.
کد برای متد یک FileReaderدیگر و BufferedReaderدیگر تنظیم می کند . Loopخطوط متن را گرد کرده
مثال
;numberOfLines++
}
while loopکمی گیج کننده به نظر می رسد .اما در واقع فقط می گوید " هر خط از متن را خوانده و وقتی به یک
مقدار تهی ) (null valueمی رسید ،توقف کنید ( ".اگر خط زیادی در یک فایل متن وجود نداشته باشد ،جاوا
یک مقدار تهی را گزارش می دهد ).در داخل آکوالدها یک شمارشگر به نام numberOfLinesرا وارد کرده
ایم.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
203
دو خط آخر کد حافظه ی بافر به نام bfرا تحت فشار می گذارد ،و تعداد خطوط را گزارش می دهد.
برای وارد کردن این متود به مرحله ی عمل ،این خط را در متود OpenFileخود تغییر دهید:
بنابراین به جای کدگذاری تعداد خطوط ،می توانیم متود جدید خود را فراخوانده و تعداد خطوط را در هر فایل
بسیار خوب ،زمان آن رسیده که گروه جدید را به کار گرفته و مشاهده کنیم که آیا فایل متن را باز می کند یا
نه.
به گروه FileDataبازگردید ،گروهی با متود اصلی در آن .یک متغیر رشته تنظیم کنید تا نام فایل متن را در
در این مرحله نیاز به ایجاد یک فایل متن در جایی از کامپیوتر خود دارید ،ما این فایل ساده را در Notepadدر
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
204
نام فایل متن ""test.txtمی باشد .یک فایل متن مشابه روی کامپیوتر خود ایجاد کنید .دقت کنید که آن را
بنابراین فایل test.txtدر درایو Cذخیره می شود .اگر برای حفظ فایل فولدری به نام MyFilesایجاد کردیم،
مسیر ""C:/MyFiles/test.txtخواهد بود .اگر الزم باشد ،می توانید مسیر فایل خود را تغییر دهید.
کار دیگری که باید انجام دهید ،ایجاد آبجکت جدید از گروه ReadFileمی باشد .سپس می توانیم متودی را
فرا بخوانیم که فایل را باز می کند .اما می توانیم این کار را در یک بلوک try … catchانجام دهیم .کد زیر را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
205
پرانتزهای مربوط به بلوک try … catchرا فراموش نکنید .برای بخش tryیک جفت آکوالد و برای بخش catch
یک جفت دیگر نیاز دارید .برای بخش tryخطوط زیر را داریم:
مثال
خط اول یک آبجکت جدید ReadFileبه نام fileتنظیم می کند .بین پرانتزهای ، ReadFileمتغیر file_name
را اضافه می کنیم .این برای ارائه ی constructorبه مسیر فایل مورد نیاز کافی می باشد.
خط دوم از کد یک ردیف رشته ) (String arrayبه نام aryLinesتنظیم می کنیم .بعد از عالمت تساوی متود
OpenFileاز گروه ReadFileرا فرا خواندیم .اگر با موفقیت فایل متن را باز کند ،سپس ردیف خطوط متن در
به هرحال اگر اشتباهی رخ دهد ،یک خطا وارد خط شده و در بخش catchاز بلوک try … catchبه پایان می
رسد:
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
206
}
بعد از لغت ، catchیک جفت پرانتز وجود دارد .در داخل پرانتزها عبارت زیر را داریم:
IOException e
کاری که این عبارت انجام می دهد ،تنظیم متغیری به نام eمی باشد که از نوع IOExceptionمی باشد.
آبجکت IOExceptionدارای متودهایی از نوع خود می باشد که می توانید از آنها استفاده کنید .یکی از این
متودها getMessageمی باشد .این متود به یوزر اطالعاتی در مورد اشتباه رخ داده ارائه می دهد.
قبل از اینکه مثالی در مورد یک پیغام خطا مشاهده کنیم ،اجازه بدهید از طریق همه ی خطوط فایل متن loop
انجام دهیم و هر کدام را چاپ کنیم .کد زیر را به بخش tryاز بلوک try … catchاضافه کنید:
مثال
;int i
}
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
207
وقتی که برنامه اجرا می شود ،پنجره ی Outputمورد زیر را چاپ خواهد کرد:
برای امتحان کردن کد بخش چک کننده ی خطا) ، (error checkingنام فایل متن را موردی که می دانید ایجاد
نشده ،تغییر دهید .سپس کد خود را مجددا اجرا کنید .در پنجره ی Outputدر تصویر زیر ،مشاهده می کنید
که فایل متن ما به testBتغییر یافته است و نمی تواند یافت شود:
اگر تمایل دارید ،می توانید پیغام خطای خود را به بخش catchاضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
208
گرچه بهتر است آن را به جاوا واگذار کنید .در بخش بعد به چگونگی نوشتن فایل متن با استفاده از کد جاوا،
با کلیک کردن بر روی File > New Fileاز منوی NetBeansیک گروه جدید در پروژه ی خود ایجاد کنید .در
بخش Categoriesاز دیالوگ باکس Javaو Classرا از لیست File Typesانتخاب کنید .روی دکمه ی
Nextدر پایین کلیک کنید .برای نام گروه WriteFileرا تایپ کرده و سپس روی Finishکلیک کنید .سه
;import java.io.FileWriter
;import java.io.PrintWriter
;import java.io.IOException
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
209
مجددا عبارت هایی که زیر آنها خط کشیده شده وجود دارند ،زیرا هنوز از گروه وارد شده استفاده نکرده ایم.
وقتی در یک فایل می نویسید ،یا می توانید از ابتدا آغاز کرده و هر موردی را بنویسید .یا می توانید از انتها
آغاز کرده و به فایل ضمیمه کنید .گروه FileWriterبه شما اجازه می دهد تا روش آن را تعیین کنید .یک فیلد
اضافه خواهیم کرد که مقدار ضمیمه را برای گروه FileWriterتنظیم می کند .ما یک فیلد هم برای تنظیم نام
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
210
فیلد Booleanدر واقع append_to_fileنامیده می شود و روی مقدار falseتنظیم کرده است .این یک
مقدار پیش فرض برای گروه FileWriterمی باشد و به این معناست که ضمیمه نمی خواهید ،اما هر چیزی را در
سازنده ) (constructorمقداری را برای فیلد pathتنظیم می کند که نام و موقعیت فایل می باشد .این برنامه
به هرحال همانطور که در بخش قبل ذکر شد ،می توانید بیشتر از یک سازنده در کد خود تنظیم کنید .می
توانیم سازنده ی دوم را در تنظیم کرده و آن را در یک مقدار ضمیمه انتقال دهیم .به این روش یک یوزر یا می
تواند از اولین سازنده استفاده کند و یا اینکه نام یک فایل و یا نام یک فایل و یک مقدار ضمیمه را توزیع کند.
مثال
;path = file_path
;append_to_file = append_value
}
اکنون سازنده ی دوم دارای دو مقدار در بین پرانتزها می باشد :یک مسیر فایل و یک مقدار ضمیمه .اگر می
خواهید به این فایل ضمیمه کنید ،می توانید در هنگام ایجاد یک آبجکت جدید از این سازنده استفاده کنید.
اگر فقط می خواهید فایل متن را بنویسید ،می توانید از اولین سازنده ) (constructorاستفاده کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
211
برای نوشتن روی فایل ،متود زیر را در زیر سازنده های خود اضافه کنید:
}
این متود نیازی به بازگشت یک مقدار ندارد ،بنابراین آن را voidمی سازیم .در بین پرانتزهای مربوط به نام
متود ،یک متغیر Stringبه نام textLineرا داریم .مشخص است که این متنی است که می خواهیم در یک
فایل بنویسیم .مجددا واضح است که باید " "throws IOExceptionرا اضافه کنیم چرا که برای کنترل
اولین چیزی که در متود الزم داریم یک آبجکت FileWriterمی باشد . FileWriterمراقب باز کردن فایل
درست و مرتب کردن متن به عنوان بایت می باشد .خط زیر را به متود writeToFileخود اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
212
موقعیت فایل به عالوه ی مقدار ضمیمه را انتقال می دهیم .این مقدار( trueضمیمه شده به یک فایل) یا
( falseضمیمه نشده )خواهد بود .اگر فایلی با نامی که انتقال داده اید ،وجود نداشته باشدFileWriter ،برای
به هرحال FileWriterبایت ها را می نویسد .اما می توانیم به کمک گروه PrintWriterیک متن ساده به
FileWriterارائه دهیم . PrintWriterچند متود ساده برای این کار در دست دارد .اما در هنگام ایجاد آبجکت
از گروه نیاز به نام یک FileWriterدارد .بنابراین خط زیر را به متود خود اضافه کنید:
برای افزودن متن به یک فایل ،نام آبجکت PrintWriterرا تایپ کرده که با یک نقطه ) (dotدنبال می شود:
print_line.
به محض اینکه این نقطه را تایپ می کنیدNetBeans ،لیستس از گزینه های متغیر را نمایش خواهد داد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
213
یکی از گزینه هایی که استفاده خواهیم کرد ،یکی از متودهای printfمی باشد .این متود به شما اجازه می دهد
تا یک رشته ی قالب بندی شده از متن را به PrintWriterانتقال دهید .یک دلیل خوب برای استفاده از، printf
بررسی کاراکترهای خط جدید می باشد .کاراکترهای خط جدید بسته به سیستم عاملی که استفاده می کنید،
متفاوت می باشند .ویندوز کاراکترهای \r\nرا برای یک خط جدید اضافه خواهد کرد .اما سیستم Unixفقط از
\nاستفاده می کند .استفاده از عملکرد printfکد گذاری صحیح را ،بدون توجه به سکو ،تضمین خواهد داد.
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
214
به متود printfدو مورد را تحویل داده ایم :فرمت مربوط به متن ،رشته ای که روی فایل بنویسیم .هر دوی این
موارد با استفاده از یک ویرگول ) (commaاز یکدیگر جدا می شوند .به این دو دقت کنید:
""%s" + "%n
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
215
برای اینکه گروه جدید خود را امتحان کنید( گروهی با متود اصلی ) mainبه گروه FileDataبازگردید .برای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
216
بنابراین یک آبجکت جدید WriteFileبه نام dataتنظیم کرده ایم .بین پرانتزهای WriteFileدو مورد اضافه
کرده ایم :نام فایل و یک مقدار true.این امر فراخوانی سازنده های دوم ) (constructorرا تضمین خواهد
کرد .اگر بخواهیم فقط فایل را بنویسیم ،کد آن مانند زیر خواهد بود:
از آنجایی که مقدار ضمیمه ی پیش فرض را با عنوان falseتنظیم کرده ایم ،اگر بخواهیم کل محتوا را بنویسیم،
برای اینکه به یوزر اجازه بدهید متوجه اتفاقی که افتاده شود ،باید چیزی از پنجره ی Outputچاپ کنید:
اکنون کد FileDataباید مانند زیر باشد ( چند کامنت اضافه کرده ایم:).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
217
اگر تمایل داشته باشید ،می توانید برای نوشتن متن یک بخش try … catchدیگر نیز اضافه کنید .به جای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
218
اکنون کد خود را اجرا کرده تا آن را امتحان کنید .شما باید به وسیله ی پیغامی که فایل متن نوشته ،محتوای
مجددا برنامه را اجرا کرده و یک خط جدید مشاهده خواهید کرد ( .می توانید به کدی که در فایل متن نوشته
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
219
و این تمام آن مورد می باشد -اکنون می توانید یک فایل متن نوشته و محتوای آن را بخوانید .در بخش بعد
ادامه خواهیم داد و به برنامه نویسی با فرما های جاوا خواهیم پرداخت.
در جاوا الزم نیست هر چیزی را به یک پنجره ی نهایی انتقال دهید .در این بخش یک برنامه ی ماشین حساب
خواهید نوشت که از این فرما ها استفاده خواهد کرد .این فرم دارای دکمه ها و یک جعبه ی متن می باشد .با
یک ماشین حساب ساده آغاز خواهیم کرد که تنها عملکرد جمع را انجام می دهد و سپس توانایی های خود را
گسترش داده به عملکردهای منها ،تقسیم و ضرب .ماشین حساب چیزی مشابه تصویر زیر خواهد بود:
(تصویر باال از یک Windows XPگرفته شده است .اگر یک سیستم عامل Linuxیا Apple Macداشته
باشد ،همانطور که موارد زیادی برای استفاده وجود دارند :مولفه ها) ، (Componentsظروف
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
220
) ،(Containersمدیران چیدمان ) ( Layout Managersو کلیات بیشتر در کنار اینها .به هرحال محیط
توسعه ی NetBeansایجاد فرم ها را به شدت آسان ساخته است و از آن برای درگ و دراپ کردن کنترل ها
به جای وارد شدن از طریق بندهای تئوری ، GUIمستقیما وارد آن خواهیم شد .با کلیک کردن بر روی > File
New Projectاز منوی NetBeansدر باال ،یک پروژه ی جدید برای این کار ایجاد کنید .از لیست ظاهر شده را
انتخاب کرده Java > Java Applicationو سپس روی دکمه ی Nextکلیک کنید.
در مرحله ی دوم از wizardعبارت MyCalculatorرا به عنوان نام پروژه تایپ کنید .در پایین نیز عبارت
""Create main classرا از حالت انتحاب خارج کنید .این امر به این دلیل است که وقتی ما یک فرم را اضافه
کردیم ،یک متود mainبرای ما توسط NetBeansایجاد خواهد شد .مرحله ی 2از wizardباید مانند زیر به
نظر باشد:
روی دکمه ی Finishکلیک کنید و NetBeansپروژه و نه چیز بیشتری ،ایجاد خواهد کرد .در سمت چپ
NetBeansنگاهی به محدوده ی Projectsنگاهی داشته باشید که باید چیزی مانند تصویر زیر را مشاهده
کنید ( اگر نمی توانید محدوده ی Projectsرا ببینید ،روی Window > Projectsاز منوی NetBeansدر باال
کلیک کنید:).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
221
معموال یک فایل .javaتحت عنوان Source Packagesوجود دارد .اما از آنجایی که بخش "Create main
"classرا از حالت لنتخاب در آوردیم ،هیچ فایل گروه جاوایی در آنجا وجود ندارد.
کاری که در اینجا انجام خواهیم داد افزودن یک فرم به پروژه می باشد .فرم ایجاد شده در گروه جاوای خود
ایجاد می شود.
برای افزودن یک فرم ،روی نام پروژه در پنجره ی Projectsراست کلیک کنید .یک منو ظاهر خواهد شد:
از منوی ظاهر شده New > JFrame Formرا انتخاب کنید .وقتی این کار را انجام می دهید باید صفحه ی زیر
در اینجا نامی برای گروه و یک نام برای پوشه از شما خواسته می شود .ما تقریبا پروژه را ایجاد کرده و آن را
MyCalculatorمی نامیم .نام پوشه و گروه وارد پروژه خواهند شد .بنابراین برای بخش (Class Nameنام
گروه) ،عبارت JavaCalculatorرا تایپ کنید .در پوشه ی خالی تکست باکس jCalculatorرا تایپ کنید.
MyCalculatorمی باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
222
وقتی wizardمربوط به بخش قبل تمام شد ،در پنجره ی اصلی یک فرم خالی ایجاد خواهد کرد.
در حال حاضر این فرم خالیست و یک مستطیل نارنجی رنگ آن را احطه کرده است .این مستطیل به این
معناست که فرم انتخاب نشده است .در فرم روی backکلیک کنید ،پس از آن دوباره مستطیل نارنجی را
مشاهده می کنید.
به دو دکمه ی Sourceو Designدر باال دقت کنید .در حال حاضر در Designهستید .برای مشاهده ی کد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
223
شما می توانید برای مشاهد یا پنهان کردن کد می توانید عالمت های به اضافه را باز کنید یا ببندید .به هرحال
دقت داشته باشید که متود mainایجاد شده است .وقتی که برنامه آغاز می شود ،این متود mainاست که
فرا خوانده خواهد شد .این برنامه یک آبجکت جدید از فرم ما ایجاد می کند و پراپرتی قابلیت رویت بودن آن را
اما NetBeansهمه ی این کد را برای شما تولید می کند .در غیر این صورت مجبور خواهید بود تمام آن را
مجددا نگاهی به بخش Projectsدر سمت چپ داشته باشید .مشاهده خواهید کرد که یک پوشه و یک فایل
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
224
در باال روی دکمه ی Designروی backکلیک نید .شما فرم خالی خود را دوباره مشاهده خواهید کرد .در
سمت راست دو بخش مشاهده خواهید کرد :یک پالت )(Paletteبا کنترل های زیاد در آن و یک بخش
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
225
(اگر نتوانستید آنها را ببینید ،از منوی NetBeansروی Window> Paletteو Window > Properties
کلیک کنید)
یک پراپرتی از یک آبجکت لیستی از مواردی است که می توانید با آن کارهایی انجام دهید ،از جمله تنظیم رنگ
زمینه ،تنظیم متن ،تنظیم فونت و موارد بسیار دیگر .اجازه بدهید تیتر را تغییر دهیم.
مطمئن شوید که فرم شما انتخاب شده است .اگر چنین باشد ،فرم انتخاب شده باشد ،با یک مستطیل نارنجی
رنگ احاطه خواهد بود .بخش propertiesدر باال JFrameرا اعالم خواهد کرد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
226
سپس دکمه ی enterرا فشار دهید .برای مشاهده ی اثر تغییر پراپرتی تیتر ) ،(titleبرنامه را به حالت معمول
اجرا کنید .وقتی برنامه را برای اولین بار اجرا می کنیدNetBeans ،یک دیالوگ باکس نمایش خواهد داد که از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
227
شما تنها یک متود دارید که در گروه JavaCalculatorقرار دارد ،بنابراین فقط روی OKکلیک کنید .سپس
فرم دارای عنوانی است که تایپ کرده اید ،به عالوه دارای آیکن های پیش فرض دیگری برای بزرگ کردن،
کوچک کردن و یا بستن .برای بستن برنامه روی Xکلیک کرده و به محیط Designبازگردید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
228
کنترل های واقع در NetBeans Paletteمی توانند روی فرم درگ شوند .بنابراین برای انتخاب آن روی Text
Fieldکلیک کنید .اکنون دکمه ی چپ ماوس را روی Text Fieldرو به پایین نگاه دارید .ماوس را در همین
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
229
مربع های اطراف متن برای تنظیم اندازه می باشند .شما می توانید دکمه ی سمت چپ ماوس را روی یکی از مربع
ها رو به پایین نگاه داشته و آن را برای طول یا عرض جدید درگ کنید .خطوط نقطه چین نشان دهنده ی
موقعیت می باشند ،یکی برای موقعیت چپ و دیگری برای موقعیت باال .دقت کنید که نام پیش فرض برای فیلد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
230
با فیلد متن انتخاب شده ،نگاهی به محدوده ی Inspectorدر پایین سمت چپ ،داشته باشید (.اگر نمی
توانید محدوده ی Inspectorرا مشاهده کنید ،از نوار منوی NetBeansروی > Window > Navigating
Inspectorکلیک کنید)
همانطور که مشاهده می کنیدjTextField ،در Inspectorانتخاب شده است .این بخش به شما نشان می
دهد که در فرم های خود چه آبجکت هایی دارید .همچنین از این قسمت می توانید یک آبجکت را تغییر نام
دهید .برای انجام چنین کاری روی jTextField1راست کلیک کنید .از منوی ظاهر شدهChange Variable ،
وقتی که روی Change Variable Nameکلیک کنید ،یک دیالوگ باکس ظاهر می شود .یک نام جدید برای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
231
روی OKکلیک کنید .وقتی این کار را انجام می دهیدNetBeans ،فیلد متن شما را تغییر نام خواهد داد.
اکنون با کلیک کردن روی دکمه ی Sourceدر پنجره ی اصلی ،دوباره به کد خود نگاهی داشته باشید .وقتی
که کد شما ظاهر می شود ،به سمت پایین اسکرول کنید .مشاهده خواهید کرد که یک متغیر فیلد خصوصی
بنابراین یک متغیر JTextFieldبه نام txtDisplayتنظیم شده است .بخش ""javax.swingمرجعی به
مجموعه ای از پوشه هاست که در توسعه ی GUIاستفاده می شوند . Swingایجاد فرم ها و کنترل های روی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
232
روی دکمه ی Designدر باال کلیک کنید تا به فرم خود برگردید .در حال حاضر فیلد متن دارای چند متن پیش
فرض می باشد .شما می توانید با تغییر پراپرتی متن از فیلد متن ،متن خود را اضافه کنید.
مطمئن شوید که فیلد متن شما در فرم انتخاب شده است .اکنون متن را در پنجره ی propertiesقرار دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
233
سپس در صفحه کلید دکمه ی enterرا فشار دهید .نگاهی به آبجکت فیلد متن خود روی فرم داشته باشید.
ممکن است اندازه ی آن تغییر پیدا کرده باشد .از دسته های تنظیم اندازه برای تغییر اندازه ی آن استفاده
فیلد textدر ماشین حساب ما ،مشخصا برای خروجی ماشین حساب استفاده می شود .اما بدون دکمه ها کار
نخواهد کرد .چگونگی افزودن آنها را در بخش بعد مشاهده خواهید کرد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
234
همانطور که قصد اضافه کردن دکمه های زیادی داریم ،افزودن دکمه به کنترلی به نام Panelنیز خوب می
باشد .اگر الزم است دکمه ها را حرکت دهید ،کافیست Panelرا جابه جا کنید .تمام دکمه با Panelجابه جا
خواهند شد.
یکی از آنها را روی فرم خود درگ کنید .نمی توانید Panelرا ببینید ،زیرا که آنها همرنگ فرم خواهند بود .اما
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
235
دسته های تغییر اندازه را درگ کرده تا Panelقسمت بیشتر فرم را پر کند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
236
سپس دکمه ای با دسته های تغییر اندازه و موقعیت خطوط مشاهده خواهید کرد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
237
نام پیش فرض دکمه jButton1می باشد .این نام را همان طور که برای فیلد textانجام دادید ،تغییر دهید.
در قسمت Inspectorراست کلیک کرده و گزینه ی Change variable nameرا انتخاب کنید .نام دکمه را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
238
نام متغیر جدید btnOneاست که یک آبجکت JButtonمی باشد که یک کنترل Swingاست .همچنین به
متغیر تنظیم شده برای panelدقت داشته باشید(.ما این متغیر را در نام پیش فرض رها کرده ایم)
در بخش بعدی چگونگی تغییر پراپرتی های دکمه های Javaرا فرا خواهید گرفت.
به ویو Designبرگردید و اطمینان حاصل کنید که دکمه ی شما انتخاب شده است .می توانیم متن روی دکمه
را تغییر دهیم .آنچه نیاز داریم یک عدد می باشد ،یک عدد برای هر دکمه روی ماشین حساب .پراپرتی text
برای دکمه ی textاستفاده می شود .بنابراین این پراپرتی را در پنجره ی propertiesقرار دهید .پیش فرض را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
239
دکمه ی enterرا روی صفحه کلید فشار دهید و پس از آن مشاهده خواهید کرد متن روی دکمه تغییر کرده
در پنجره ی propertiesمی توانید سایز دکمه را تغییر دهید . Horizontal Sizeو Vertical Sizeرا زیر تیتر
Layoutقرار دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
240
همچنین می توانید شکل فونت و اندازه ی فونت را در پنجره ی propertiesتغییر دهید .مطمئن شوید که
دکمه ی مورد نظر انتخاب شده است .اکنون پراپرتی fontرا قرار دهید .روی دکمه ی کوچک در سمت راست
وقتی روی دکمه ی fontکلیک می کنید ،باید دیالوگ باکس ظاهر شده را مشاهده کنید .اندازه ی فونت را به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
241
اکنون فرم شما باید مانند تصویر زیر باشد(.برای مشاهده ی اوت الین مربوط به ، panelکافیست ماوس خود
اکنون الزم است به همین روش 9دکمه ی دیگر نیز اضافه کنید ،اعداد از 2تا 9و همچنین .0نام هر متغیر را
بهbtnFour ،btnThree ، btnTwoو غیره تغییر دهید .متن پیش فرض را حذف کرده و به جای آن یک عدد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
242
وارد نمایید .سپس اندازه ی هر دکمه را به 50و 30تغییر دهید .سرانجام پراپرتی fontمربوط به هر دکمه را
تغییر دهید.
وقتی کار شما تمام شده است ،بخش Inspectoerباید مشابه تصویر زیر باشد.
اگر دکمه های شما در محل درستی نباشند ،روی یک دکمه کلیک کنید تا آن را انتخاب کنید .دکمه ی چپ ماوس
خود را به پایین نگاه دارید و سپس در یک موقعیت جدید در panelدرگ کنید .برای جابه جا کردن تمام دکمه
ها به طور همزمانpanel ،را انتخاب کرده و آن را به یک موقعیت جدید درگ کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
243
وقتی از فرم خود راضی هستید ،باید مشابه تصویر زیر باشد(.فیلد textرا تغییر اندازه می دهیم)
فقط سه دکمه ی دیگر اضافه کنید :یک دکمه ی به اضافه ،یک دکمه ی مساوی و یک دکمه ی پاک کردن .این
دکمه ها را در panelخود اضافه خواهیم کرد و آنها را به سمت راست ماشین حساب حرکت خواهیم داد.
همانطور که مشاهده می کنید ،ماشین حساب ما در سمت راست جایی ندارد .اما به راحتی می توانید یک فرم را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
244
فقط روی فرم کلیک کرده و نه روی فیلد panelیا text.اگر این کار را به درستی انجام دهید ،یک مستطیل
نارنجی رنگ مشاهده خواهید کرد که اطراف فرم را احاطه کرده است .اکنون ماوس خود را به لبه های فرم
حرکت دهید .نشانگر ماوس تغییر شکل می دهد ،همانطور که در تصویر زیر مشاهده می کنید.
وقتی که نشانگر ماوس تغییر شکل می دهد ،دکمه ی چپ ماوس خود را رو به پایین نگاه دارید .اکنون به بک
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
245
به panelجدید سه دکمه اضافه کنید .نام متغیرها را بهbtnEquals ، btnPlusو btnClearتغییر دهید.
برای دکمه ها و متن ،یک عالمت +برای دکمه ی به اضافه ،یک عالمت = برای دکمه ی تساوی و لغت ""clear
برای دکمه ی پاک کردن تایپ کنید .فونت را به عدد دکمه ها تغییر دهیدbold. 14 ،اندازه ی دکمه های به
اضافه و مساوی نیز باید با دکمه ی اعداد یکی باشد 50 :و . 30برای دکمه ی Clearآن را به 70و 30تغییر
دهید .پس از تمام اینها فرم شما باید مانند تصویر زیر باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
246
در این مرحله می توانید فرم خود را اجرا کنید تا ببینید چطور به نظر می رسد.
ظاهر بسیار خوبی دارد .گرچه وقتی روی دکمه ها کلیک کنید هیچ اتفاقی نمی افتد .ما به طور کوتاه چند کد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
247
در بخش قبل ماشین حساب خود را در جاوا طراحی کردید .در این بخش رویدادهایی برای آبجکت های فرم جاوا
از لحاظ برنامه نویسی ،یک رویداد به زمانی گفته می شود که یک اتفاق خاص بیفتد .برای فرم ها رویداد به
معنای کلیک کردن دکمه ها ،جابه جایی ماوس ،وارد کردن متن به فیلد ، textبستن برنامه و موارد بسیار
دیگر.
رویدادها آبجکت هایی در جاوا هستند .آنها از مجموعه ای از گروه ها گرفته می شوند که در
java.util.EvenObjectذخیره شده اند .وقتی که یک دکمه کلیک می شود ،گفته می شود که آن دکمه منبع
رویداد می باشد .اما عمل کلیک کردن یک آبجکت رویداد را تولید می کند .سپس آبجکت رویداد در جستجوی
آبجکتی است که منتظر کلیک کردن ماوس یا ضربه زدن به کلید یا هر اتفاق دیگری است که می تواند در یک
فرم اتفاق بیفتد .به عنوان مثال یک فیلد textمی تواند منتظر ضربه ی یک کلید در صفحه کلید باشد .یا
باکس drop downمی تواند منتظر آیتم انتخاب شده در باکس باشد.
آبجکت های مختلفی رویدادهای متفاوتی به وجود می آورند .برای یک دکمه ،رویدادی که شروع می شود
ActionListenerمی باشد .برای یک فیلد textاین رویداد KeyEventمی باشد .به موارد مشابه فکر کنید،
آبجکت رویداد مسئول انتقال پیام ها بین آبجکت های فرم می باشد که رویدادی بر روی آنها اتفاق افتاده و یا
اگر همه ی اینها کمی پیچیده به نظر رسیدند ،نگران نباشید .اما چند مثال برنامه نویسی می تواند تمام موارد را
اگر بخواهیم 3و 2را بایکدیگر جمع کنیم ( ،)3+2ابتدا الزم است روی دکمه ی 3کلیک کنیم.سپس عدد 3روی
فیلد textظاهر خواهد شد .پس از آن دکمه ی به اضافه کلیک خواهد شد و این به برنامه در مورد این واقعیت
که قصد جمع کردن چند مورد را داریم ،پیغام خواهد داد وهمچنین فیلد متن را برای عدد بعدی آماده خواهد
کرد .عدد بعدی 2می باشد و ما این مقدار را همراه با 3ذخیره می کنیم .برای به دست آوردن مجموع دکمه ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
248
تساوی کلیک می شود و در واقع در اینجا اعداد ذخیره شده را به دست می آوریم ( )3 , 2و آنها را با یکدیگر
اولین مشکل چگونگی دستیابی به اعداد روی دکمه ها می باشد .این کار را می توانیم با بازگرداندن پراپرتی
متن مربوط به دکمه انجام دهیم .زمانی که متن را داشته باشیم می توانیم آن را در تکست باکس قرار دهیم.
در ویو Designدر NetBeansدکمه ی شماره ی 1خود را انتخاب کنید .اکنون نگاهی به پنجره ی Inspector
در پایین سمت چپ ،داشته باشید .دکمه ی btnOneخود را جایگذاری کنید .حاال کلیک راست کنید تا منوی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
249
از منوی پیش رو Eventرا انتخاب کرده و باز از منوی جدیدتر روی Actionو سپس روی actionPerformed
کلیک کنید.
مثال
اولین خط کمی بلند می باشد .اما این خط فقط یک متود با یک آبجکت ActionEventبین پرانتزها می باشد.
وقتی دکمه کلیک می شود ،هر آنچه بین پرانتزها نوشته ایم ،اجرا خواهند شد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
250
برای به دست آوردن متن از آبجکت فرم ،می توانید ازمتود getTextاستفاده کنید .بنابراین برای دریافت متن
برای دریافت متن از فیلد متن نیز می توان از کد زیر استفاده کرد.
به هرحال اگر بخواهیم چیزی را در داخل فیلد متن قرار دهیم ،متود مورد استفاده setTextمی باشد.
;)txtDisplay.setText(btnOneText
}
برنامه ی خود را اجرا کرده و آن را تست کنید .روی دکمه ی 1کلیک کنید و پس از آن باید عدد 1را در قسمت
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
251
به هرحال مشکلی در اینجا وجود دارد .اگر بخواهید عدد 11یا عدد 111را وارد کنید چطور؟ وقتی که به طور
مکرر روی یک دکمه کلیک می کنید ،اتفاق دیگری نمی افتد .همیشه یک بار عدد 1تایپ می شود و مهم نیست
دلیل آن این است که کد ما آنچه را از قبل در فیلد متن بوده ،حفظ نمی کند و فقط عدد 1را در آنجا قرار می
دهد .اگر می خواستیم عدد 11را تایپ کنیم ،می بایست 1اول را حفظ کنیم .برای انجام چنین کار باید متن را
از فیلد متن گرفته و آن را با دکمه ی textترکیب کنید .اولین خط کد را به این شکل اصالح کنید.
حاال می گوییم که متن را از فیلد متن گرفته و آن را با دکمه ی textترکیب کنید .نتیجه را در متغیری به نام
btnOneTextذخیره کنید.
برنامه ی خود را دوباره اجرا کرده و چند بار روی دکمه ی 1کلیک کنید .پس از آن باید مشاهده کنید که فیلد
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
252
می توانیم همان کد را برای همه ی اعداد روی ماشین حساب اضافه کنیم .به ویو designبرگردید .روش دیگر
اضافه کردن یک Actionبه یک دکمه این است که به جای راست کلیک کردن در بخش ، Inspectorبر روی
دکمه دابل کلیک کنید .بنابراین روی دکمه ی عدد 2دابل کلیک کنید .یک کد ایجاد خواهد شد ،درست مانند
دفعه ی قبل.
}
تنها تفاوت با کد قبل ،نام متغیر Stringمی باشد(اکنون btnTwoTextنامیده می شود) و این واقعیت که ما
متن را از btnTwoدریافت می کنیم .بین پرانتزهای ، setTextنام متغیر Stringرا انتقال می دهیم.
دوباره برنامه ی خود را اجرا کنید .اکنون باید قادر به کلیک کردن روی دکمه های 1و 2باشید و همچنین متنی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
253
همان کد را برای تمام دکمه های ماشین حساب خود اضافه کنید .سپس برای دریافت stub codeروی روی هر
دکمه دابل کلیک کنید و کد دوخطی را به هر دکمه اضافه کنید .الزم ایت که نام متغیر Stringرا تغییر دهید.
می توانید کدی را که دارید کپی و پیست کنید .سپس فقط نام متغیر Stringرا تغییر دهید ،نام دکمه بعد از
بخش btnو بخش بین پرانتزهای setText.اگر موردی را مشاهده کردید که زیر آن خط کشیده شده ،باید
وقتی که کار شما تمام شد ،کد مربوط به همه ی دکمه ها باید مانند زیر باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
254
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
255
ماشین حساب خود را اجرا کرده و آن را تست کنید .باید بتوانید تمام اعداد را از 0تا 9وارد کنید.
در بخش بعد کد جاوا را برای دکمه ی به اضافه در ماشین حساب خواهید کرد.
اکنون که دکمه های عدد در ماشین حساب جاوا کار می کنند ،کار بعدی رسیدگی به دکمه ی به عالوه در ماشین
حساب می باشد .تنها چیزی که دکمه ی به عالوه برای کار کردن نیاز دارد ،ذخیره کردن عدد موجود در فیلد
متن می باشد .این ذخیره سازی ثبت اولین عددی است که قرار است به آن اضافه شود .پس از آن نیز کلیک
شدن دکمه ی به عالوه را ثبت می کنیم و نه دکمه های دیگری مثل تفریق و یا تقسیم و یا ضرب.
برای ذخیره سازی مقدار نیاز به نیاز به تنظیم یک فیلد متغیر داریم ،که در واقع متغیری است خارج از هر کد
دکمه ای .این برنامه طوری است که همه ی دکمه ها می توانند آنچه را در دکمه ذخیره شده ،ببینند.
متغیر زیر را در باالی پنجره ی کد گذاری ) (codingاضافه کنید(می توانید آن را در پایین ،همراه با متغیرهای
فیلد NetBeansکه برای آبجکت های فرم تنظیم شده ،قرار دهید؛ اما ما متغیرهای خود را مجزا نگهداری می
کنیم)
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
256
بنابراین ما متغیری به نام total1را تنظیم می کنیم .نوع متغیر doubleمی باشد و مقدار پیش فرض آن نیز
0.0می باشد.
برای ذخیره سازی مقدار مربوط به فیلد ، textنیاز به دریافت متن داریم .اما الزم است آن را از Stringبه
Doubleتبدیل کنیم .این کار را می توانید با متود parseDouble methodاز آبجکت Doubleانجام دهید.
) ) (Double.parseDouble( txtDisplay.getText
به هرحال وقتی مقدار را از فیلد متن به یک متغیر total1ذخیره می کنیم ،الزم است آنچه را در total1است را
نیز حفظ کنیم .همچنین می توانیم فیلد متن را پاک کنیم و برای عدد دوم آماده کنیم.
بنابراین به ویو Designدر NetBeansبازگردید .روی دکمه ی به عالوه دابل کلیک کنید تا code stubرا
;)""(txtDisplay.setText
بین پرانتزهای ، setTextیک جفت عالمت نقل قول (") بدون هیچ فاصله ای بین آنها ،وجود دارد .این برای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
257
در حال حاضر این برنامه مربوط به دکمه ی به عالوه می باشد ،بعدا به بررسی آن خواهیم پرداخت .گرچه تمام
کاری که انجام می دهیم ذخیره ی یک عدد در متغیر total1و حفظ آنچه در این متغیر است ،می باشد .زمانی که
عدد ذخیره می شود ،فیلد متن را پاک کرده ایم .اکنون یوزر می تواند عدد دوم را به عدد اول اضافه کند.
پس از اینکه یوزر عدد دوم را انتخاب کرد ،دکمه ی تساوی باید کلیک شود .کلیک کردن بر روی دکمه ی تساوی
پاسخ جمع را تولید خواهد کرد .برای ذخیره سازی خروجی این محاسبه ،می توانیم یک فیلد متغیر دیگر تنظیم
برای دریافت پاسخ این جمع ،هر آنچه در حال حاضر در total1ذخیره شده است ،گرفته و آن را به هر آنچه در
فیلد متن وجود دارد ،اضافه می کنیم .مجددا الزم است رشته را فیلد متن تجزیه کرده و آن را به یک double
تبدیل می کنیم.
به ویو Designبرگردید و روی دکمه ی تساوی دابل کلیک کنید .در code stubکه ایجاد شده ،خط زیر را
اضافه کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
258
این خط متن را از فیلد متن گرفته و stringرا به doubleتبدیل می کند .سپس نتیجه به total1اضافه می
کار دیگری که باید انجام دهیم ،نمایش پاسخ در ماشین حساب در فیلد متن می باشد .به هرحال اکنون که
فیلدها متن را و نه اعداد را حفظ می کنند ،باید دوباره doubleرا به stringتبدیل کنیم .اگر سعی کنید
مستقیما یک مقدار doubleرا در فیلد متن ذخیره کنید ،پیغام خطا دریافت خواهید کرد.
برای تبدیل یک doubleبه متن می توانید از متود toStringاز آبجکت Doubleاستفاده کنید .خط زیر را
این تبدیل بین پرانتزهای setTextانجام می شود .اما اگر تمایل داشته باشید می توانید یک متغیر جدید
تنظیم کنید.
خط آخر برای دکمه های تساوی می تواند متغیر total1را حذف کند .زمانیکه متغیر total1حذف شد ،یک
محاسبه ی جدید آغاز می شود .اینجا خطی را که می توان اضافه کرد ،مشاهده می کنید.
;total1 = 0
;total1 = 0
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
259
در بخش بعد کدی برای دکمه ی Clearخواهیم نوشت .همچنین چند مثال را بررسی خواهید کرد.
در ویو Designروی دکمه ی Clearدابل کلیک کنید تا code stubرا ایجاد کنید .اکنون این دو خط را دکمه
ی Clearاضافه کنید.
;total2 = 0
;)""(txtDisplay.setText
زمانیکه این خطوط را اضافه کردید ،می توانید ماشین حساب خود را امتحان کنید .برنامه را اجرا کرده و جمع
اعداد را تست کنید .ماشین حساب شما باید اعداد را به درستی با هم جمع کند.
به هرحال یک مورد نادیده گرفته شده است – عالمت ممیز (point).در حال حاضر ماشین حساب شما نمی
تواند اعدادی مانند 35.8 + 23.6را با هم جمع کند .بنابراین یک دکمه ی ممیز به فرم خود اضافه کنید .کد را
برای آن بنویسید(.در واقع این همان کدی است که برای دکمه های اعداد استفاده کردید)
پراپرتی فونت را برای فیلد متن تنظیم کنید bold. 14 ،وقتی تمرین های باال را کامل کردید ،ماشین حساب
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
260
تبریک – اکنون شا یک برنامه ی ماشین حساب جاوا نوشته اید .بسیار خوب ،این ماشین حساب فقط می تواند
اکنون که دکمه ی جمع در ماشین حساب جاوا کار می کند ،می توانیم دکمه های تفریق ،تقسیم و ضرب را
اضافه کنیم .درست مانند دکمه ی جمع ،این دکمه ها نیز کاری انجام نمی دهند :هنوز دکمه ی تساوی تمام
کارها را انجام خواهد داد .تنها کاری که اپراتورهای دکمه ها انجام می دهند ،ثبت دکمه ای است که کلیک می
اولین کاری که باید انجام دهید ،قرار دادن چند دکمه در فرم می باشد .در تصویر زیر ،دکمه ی Clearرا جابه
جا کرده ایم و تمام اپراتورهای مربوط به دکمه ها را در سمت راست panelقرار می دهیم .به راحتی می توانید
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
261
زمانی که دکمه های جدید را اضافه کرده اید ،متغیرهای پیش فرض را به btnDivide ،btnSubtractو
btnMultiplyتغییر نام دهید( .روش دیگری برای تغییر نام متغیر کلیک راست کردن روی دکمه می باشد.
سپس منویی ظاهر خواهد شد ". "Change Variable Nameرا انتخاب کنید) .
تکنیکی که برای دریافت دکمه ی کلیک شده استفاده خواهیم کرد ،ذخیره کردن متن دکمه در field variable
می باشد .سپس می توانیم از یک عبارت switchبرای امتحان کردن کاراکتر در field variableاستفاده کنیم.
اگر این کاراکتر عالمت +باشد ،می توانیم عمل جمع را انجام دهیم .اگر عالمت ؟ باشد می توانیم تفریق انجام
دهیم و اگر عالمت /باشد ،تقسیم خواهیم کرد و اگر عالمت *باشد ،ضرب خواهیم کرد.
اکنون روی دکمه ی Sourceکلیک کنید تا به کد خود بازگردید .متغیر فیلد زیر را در باال و درست زیر دو متغیر
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
262
برای دریافت کاراکتر روی دکمه ای که کلیک شده بود ،می توانیم متدی را تنظیم کنیم .متد زیر را به کد خود
اضافه کنید.
تا زمانی که متد باال بین پرانتزهای Classو نه بین کروشه های متود دیگر ،می باشد ،می توانید آن را در هر
ما متود getOperatorرا فرا خوانده ایم .این یک متد voidمی باشد ،بنابراین هیچ مقداری گزارش نمی دهد-
این متد تنها در اجرای کد همراهی می کند .بین پرانتزهای تیتر متود یک متغیر Stringبه نام btnTextداریم.
این متغیر مشخصا متن مربوط به دکمه ای است که کلیک شده است.
متن مربوط به دکمه یک رشته می باشد .به هرحال عبارت های switchدر جاوا نمی توانند رشته ها را کنترل
کنند ،بنابراین الزم است که رشته را یه یک کاراکتر تغییر دهیم .این کار را می توان به وسیله ی خط زیر انجام
داد.
;)math_operator = btnText.charAt(0
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
263
متد charAtیک کاراکتر از یک رشته را دریافت می کند .کاراکتر مورد نظر شما بین پرانتزهای charAtقرار می
گیرد .نماد ریاضی دکمه های ما در رشته همیشه در کاراکتر 0قرار می گیرد .سپس در فیلد متغیر charکه در
به دو خط دیگر در کد دقت کنید .این دو خط دقیقا مشابه خطوط دکمه ی به عالوه هستند و دقیقا همان کار را
نیز انجام می دهند – ذخیره سازی اولین عدد در متغیری به نام total1.اپراتور هر دکمه الزم است که این کار
را انجام دهد ،بنابراین وجود این دو خط در متد به جای کد مربوط به اپراتور دکمه ،معناددار می باشد.
;)""(txtDisplay.setText
;)getOperator(button_text
دو خط اول متن را از دکمه ی به عالوه دریافت کرده و آن را در یک رشته متغیر ذخیره می سازند .این کار به
همان دو خط می توانند به اپراتور دیگر دکمه ها اضافه شوند و تنها نام دکمه را تغییر دهند.
به ویو designبازگردید و روی دکمه ی منها دابل کلیک کنید .برای code stubخطوط زیر را اضافه کنید.
;)getOperator(button_text
(گرچه برای متغیر Stringاز همان نام استفاده کرده ایم ،به هرحال جاوا گیج نمی شود ،چرا که متن هر دکمه
روی دکمه ی تقسیم خود دابل کلیک کرده و خطوط زیر را اضافه کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
264
;)getOperator(button_text
;)getOperator(button_text
اکنون که کد مربوط به اپراتور هر چهار دکمه را داریم ،می توانیم با دکمه ی تساوی تطبیق دهیم.
برای دکمه ی تساوی می توان یک عبارت switchتنظیم کرد تا درک کنیم که متغیر math_operatorچیست.
{ ) switch ( math_operator
case '+':
;break
case '-':
;break
case '/':
;break
case '*':
;break
}
عبارت switchبرای هر کدام از اپراتورهای ریاضی یک مورد دارد ،/ ،- ،+ :و *.هنوز هیچ کدی اضافه نکرده
;total1 = 0
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
265
دو خط آخر نیازی به تغییر ندارند .به هرحال خط اول می تواند در عبارت switchاستفاده شود .به یاد داشته
case '+':
;) ) (total2 = total1 + Double.parseDouble(txtDisplay.getText
;break
اگر دکمه ی منها کلیک شده باشد ،می توان به سادگی در خط باال جمع را به منها تغییر داد.
case '-':
;break
case '/':
;break
case '*':
;break
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
266
زمانی که کد جدید را به دکمه ی تساوی اضافه کرده اید ،ماشین حساب را اجرا کرده و آن را امتحان کنید .مورد
اکنون یک ماشین حساب ساده دارید که می تواند عملکردهای جمع ،تفریق ،ضرب و تقسیم را انجام دهد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
267
حاال باید تمرین هایی با آبجکت های فرم داشته باشید ،اجازه بدهید برنامه ی جدیدی ایجاد کنیم که از کنترل
برای این مورد یک پروژه ی جدید ایجاد کنید (Java > Application).پروژه را formcontrolsبنامید و بخش
در wizardروی دکمه ی Finishکلیک کرده تا پروژه را ایجاد کنید .اکنون با راست کلیک کردن روی نام پروژه
در پنجره ی Projectsو انتخاب ، New > JFrame Formیک فرم اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
269
وقتی که دیالوگ باکس ظاهر شدFormObjects ،را با عنوان نام Classو form_controls_lessonرا با
همچنین یک فرم جدید خواهید داشت که روی آن کنترل هایی را اضافه می کنید.
combo boxلیست رو به پایینی از آیتم هایی است که می توانند توسط یک یوزر انتخاب شوند .این لیست در
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
270
کنترل Combo Boxرا قرار داده و یکی را روی فرم خود درگ کنید .یک دکمه )(Buttonو یک Text Field
(فیلد متن) را روی فرم خود درگ کنید .آنچه ما انجام خواهیم داد قرار دادن آیتم انتخاب شده از لیست در
فیلد متن می باشد .این اتفاق زمانیکه دکمه کلیک شده باشد ،خواهد افتاد.
روی backکلیک کرده تا به Combo Boxبازگشته و آن را هایالیت کنید .راست کلیک کرده و از منوی ظاهر
شده Change Variable Nameرا انتخاب کنید . comboOneرا به عنوان نام جدید تایپ کرده و سپس
به همین طریق نام دکمه را به btnComboBoxتغییر دهید .متن روی دکمه را به Get Drop Down Item
تغییر دهید.
نام فیلد متن را نیز به txtComboBoxItemتغییر دهید .متن پیش فرض را حذف کرده و آن را خالی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
271
آیتم های پیش فرض در Combo Boxعبارتند ازItem 2 ،: Item 1و غیره .ما آیتم های خود را اضافه خواهیم
کرد.
برای انتخاب روی backکلیک کرده تا به Combo Boxبازگردید .اکنون به پنجره ی propertiesدر سمت
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
272
روی دکمه ی کوچک در سمت راست ردیف ،دکمه ای با سه نقطه ،کلیک کنید .دیالوگ باکس زیر ظاهر خواهد
شد:
شما می توانید آیتم های بخش سفید را های الیت کرده و آنها را حذف کنید .آیتم های زیر را جایگزین کنید : C
Sharp, Java, PHP, Visual Basic .NET.دیالوگ باکس شما مانند زیر خواهد بود:
وقتی تغییرات را اعمال کردید ،روی OKکلیک کنید .اکنون combo boxشما با آیتم های خودتان پر خواهند
شد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
273
برنامه ی خود را اجرا کرده و آن را امتحان کنید (:وقتی از شما می خواهد تا Main Classرا انتخاب کنید فقط
وقتی که دکمه کلیک می شود ،می خواهیم که آیتم انتخاب شده در فیلد متن ظاهر شود .بنابراین روی دکمه ی
تشخیص اینکه کدام آیتم انتخاب شده است ،یک متود مربوط به باکس های comboمی باشد که
getSelectedItemنامیده می شود .اما این متود یک آبجکت را به عنوان یک مقدار بازمی گرداند .آنچه ما می
خواهیم یک متن از یک لیست می باشد .برای تبدیل یک آ Objectبه یک ، Stringمی توانید کاری با عنوان
بنابراین ما در حال تنظیم یک ررشته متغیر با عنوان itemTextهستیم .پس از عالمت تساوی از متود
getSelectedItemاز comboOneاستفاده می کنیم .اما دقت کنید که castingچگونه انجام می شود – با
تایپ متغیر Stringبین پرانتزها .این درست قبل از آبجکت یا مقداری است که سعی در تبدیل ) (castآن
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
274
برای نمایش آیتم انتخاب شده در فیلد متن ،فقط کافیست متن را برای فیلد متن تنظیم کنید .این خط را درست
برنامه ی خود را مجددا اجرا کرده و آن را امتحان کنید .از لیست خود یک آیتم انتخاب کنید .سپس روی دکمه ی
خود کلیک کنید .آیتمی که انتخاب کرده اید باید در فیلد متن ظاهر شود:
در حال حاضر جعبه ی comboکمی خالی به نظر می رسد .می توانید آن را با کمی رنگ و فونت های متفاوت
تنظیم کنید.
برنامه ی خود را متوقف کرده و به ویو Designدر NetBeansبازگردید .روی combo boxکلیک کرده تا آن
را انتخاب کنید .اکنون مجددا نگاهی به پنجره ی propertiesداشته باشید .تنظیمات زیر را امتحان کنید:
Background Colour
Foreground Colour
Font
Border
برای مدتی نیاز به اجرا در اطراف آنها دارید .برای رنگ ها RGBبه نظر بسیار مناسب می باشد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
275
در بخش بعد چگونگی کار چک باکس های جاوا را مشاهده خواهید کرد.
گرچه می توانند کمی آزار دهنده ی باشند ،بنابراین اضافه کردن آنها به panelفکر خوبیست .به این روش می
بنابراین به فرم خود یک panelاضافه کنید که در زیر Swing Containersدر پالت NetBeansیافت می
شود .اکنون کنترل چک باکس را جایگذاری کنید .یک چک باکس را روی panelخود درگ کنید:
متن jCheckBox1متن پیش فرض می باشد .می توانید این متن را یا در پنجره ی propertiesتغییر دهید و
یا با راست کلیک کردن بر روی چک باکس .از منوی ظاهر شده Edit Textرا انتخاب کنید ( .چند مورد از آیتم
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
276
وقتی که روی Edit Textکلیک می کنید ،متن پیش فرض های الیت خواهد شد:
دکمه ی enterدر صفحه کلید را فشار دهید ،متن برای چک باکس شما تغییر خواهد کرد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
277
به هرحال این فقط متن را تغییر می دهد و نه نام متغیر را .همانطور که در قسمت Inspectorدر سمت چپ
نام متغیر همان نام پیش فرض بماند .اما به یاد داشته باشید که تغییر متن یک کنترل نام متغیر آن را تغییر
نخواهد داد.
اکنون که یک چک باکس به panelخود اضافه کرده اید ،می توانید سه مورد دیگر نیز اضافه کنید .متن هر
سه را به Java, PHPو Visual Basicتغییر دهید .سپس چک باکس شما مانند تصویر زیر به نظر خواهد
رسید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
278
آنچه ما انجام خواهیم داد ،دریافت آیتم هایی است که یک یوزر چک کرده است .برای نمایش آیتم ها ،به جای
بنابراین یک دکمه به فرم خود اضافه کنید .نام متغیر را به btnCheckBoxesتغییر دهید .متن روی دکمه را
کنترل Text Areaرا در پالت NetBeansجایگذاری کرده و یکی را روی فرم خود درگ کنید .نام متغیر را به
taOneتغییر دهید.
وقتی کنترل های جدید خود را ردیف کردید ،فرم شما باید مشابه تصویر زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
279
از( IF Statementsعبارات شرطی )استفاده کنیم تا باکس های انتخاب شده را بررسی کنیم .اگر انتخاب شده
باشند ،با افزودن متن از هر چک باکس ،کی توانیم یک رشته ایجاد کنیم.
برای ایجاد یک code stubروی دکمه ی جدید خود دابل کلیک کنید .کد زیر را اضافه کنید:
رشته ای که در حال ساخت آن هستیم s1نامیده می شود .اگر یک چک باکس انتخاب شده باشد ،متن را از آن
چک باکس دریافت خواهیم کرد .که این متن همراه با کاراکتر خط جدید)' ، ( '\nدر متغیر s1ذخیره می شود.
آخرین خط از کد ،متن را برای بخش textتنظیم می کند .بین پرانتزهای ، setTextمتغیر s1را داریم که رشته
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
280
وقتی که تایپ کردن کد را تمام کردید ،برنامه ی خود را اجرا کنید .تعدادی از چک باکس ها را انتخاب کرده و
سپس روی دکمه کلیک کنید .باید متوجه شوید که آیتم هایی که انتخاب کرده اید در بخش textظاهر شده
اند:
یک یا چند تا از این باکس ها را از حالت انتخاب در آورید .تنها باکس های انتخاب شده باید در این قسمت ظاهر
شوند.
یک panelرا روی فرم خود درگ و دراپ کنید .سپس کنترل Radio Buttonرا در پالت NetBeansقرار
دهید .یک دکمه ی Radioرا روی پالت جدید خود دراگ کنید ،که باید شبیه به تصویر زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
281
متن پیش فرض برای اولین دکمه ی radioعبارت jRadioButton1می باشد .ما از دکمه های radioخود
استفاده می کنیم تا به یوزر اجازه بدهیم که یک روش پرداخت ) (payment methodانتخاب کند .بنابراین
متن دکمه ی خود را به Credit Cardتغییر دهید ( .متن می تواند به همان روشی تغییر کند که در مورد چک
باکس ها انجام دادید .مجددا نام متغیر همان نام پیش فرض ،jRadioButton1 ،باقی می ماند).
دو دکمه ی radioدیگر به panelاضافه کنید .متن را به Debit Cardو PayPalتغییر دهید:
به هرحال مشکلی با دکمه های افزوده شده وجود دارد .برای مشاهده ی مشکل مجددا برنامه را اجرا کنید.
اکنون یکی از دکمه های radioرا انتخاب کنید .سعی کنید یک دکمه ی دیگر انتخاب کنید ،مشاهده خواهید
گرچه با این دکمه ها می خواهیم که یوزر فقط یک گزینه ی پرداخت را انتخاب کند .برای حل این مشکل ،جاوا به
شما اجازه ی ایجاد چیزی به نام ButtonGroupرا داده است .همانطور که از نام آن پیداست ،این برنامه به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
282
شما اجازه ی گروه بندی دکمه ها را تحت یک عنوان می دهد .سپس می توانید دکمه های radioرا به یک گروه
اضافه کنید .زمانی که دکمه ها را به گروه اضافه کردید ،تنها یک گزینه برای انتخاب موجود می باشد.
برای مشاهده ی چگونگی کار کردن ، ButtonGroupمتد زیر را به کد خود اضافه کنید:
هنگام انجام این کار مشاهده خواهید کرد که NetBeansبه شما هشدار وجود یک مشکل را می دهد و زیر
قسمت هایی از کد را با قرمز خط کشیده است .این اتفاق به این خاطر می افتد که NetBeansنمی تواند
گروهی به نام ButtonGroupپیدا کند .در نتیجه نمی تواند آبجکت جدیدی از آن ایجاد کند.
برای حل این مشکل ،نیاز به وارد کردن گروه مرتبط از کتابخانه ی Swingمی باشد .بنابراین به باالترین قسمت
;import javax.swing.ButtonGroup
اکنون باید قسمت هایی که به رنگ قرمز خط کشیده شده بودند ،از بین رفته باشند.
متد groupButtonبا استفاده از متود اضافه شده ،دکمه های radioرا به آبجکت ButtonGroupاضافه می
کند:
می توانیم از constructorمتود groupButtonرا فرا بخوانیم .به این طریق دکمه های ، radioدر هنگام بار
گذاری فرم ،گروه بندی خواهند شد .فراخوانی متود زیر را به constructorخود اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
283
برنامه ی خود را مجددا اجرا کرده و سعی بیشتر از یک دکمه ی radioانتخاب کنید .اکنون مشاهده می کنید که
برای مشاهده ی دکمه ی انتخاب شده ،متودی به نام isSelectedوجود دارد که می توانید استفاده کنید.
یک دکمه ی معمولی به فرم خود اضافه کنید .وقتی روی این دکمه کلیک می کنیم ،یک پیغام برای ما نمایش
نام متغیر دکمه ی خود را به btnRadiosتغییر دهید .پراپرتی متن را به Payment Optionتغییر دهید.
اکنون روی دکمه ی جدید خود دابل کلیک کنید تا یک code stubایجاد کنید .کد زیر را اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
284
تمام کاری که در اینجا انجام می دهیم بررسی دکمه ی radioانتخاب شده می باشد .سپس متن را از دکمه ی
می توانیم یک باکس پیغام داشته باشیم تا گزینه ی پرداخت انتخاب شده را نمایش دهیم .خط زیر را به پایین
کد دکمه ی خود اضافه کنید ،درست زیر آخرین عبارت: IF
از آنجایی که این خط طوالنی است ،مجبوریم اندازه ی فونت را تغییر دهیم .اما JOptionPaneرا در بخش قبل
مشاهده کرده اید .تنها تفاوت اولین آیتم بین پرانتزها می باشد .از آنجایی که ما از یک consoleاستفاده می
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
285
FormObjects.this
اولین آیتم بین پرانتزها برای پنجره ای است که در آن قصد نمایش پیغام را دارید . Nullبه معنای بدون پنجره
)(no windowمی باشد .عبارت FormObjects.thisنیز به معنای این مولفه از گروه ، FormObjectsمی
باشد.
برنامه ی خود را مجددا اجرا کرده و یک آیتم از radio buttonانتخاب کنید .سپس روی دکمه ی خود کلیک
در بخش بعد چگونگی اضافه کردن منوها به فرم های جاوا را مشاهده خواهید کرد .
شما می توانید به فرم های جاوای خود منوهایی اضافه کنید ،مواردی مانند View ،Edit ،Fileو غیره .هر منو
دارای آیتم هایی می باشد که این آیتم ها نیز دارای منوهایی می باشند.
به ویو Designبازگردید .در پالت ، NetBeansآیتم Menu Barرا قرار دهید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
286
یکی را به باالی فرم خود درگ کنید .وقتی به دکمه ی ماوس اجازه ی حرکت می دهید ،یک نوار منوی پیش
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
287
گرچه هیچ آیتم منویی به طور پیش فرض اضافه نشده است .برای اضافه کردن آیتم های خود ،روی منوی File
کلیک کرده تا آن را انتخاب کنید .با انتخاب آیتم منوی ، Fileراست کلیک کنید .یک منوی جدید ظاهر خواهد
آنچه ما انجام خواهیم داد افزودن آیتم های منو برای باز کردن و یا ذخیره کردن یک فایل می باشد.
روی متن پیش فرض jMenuItem1دابل کلیک کنید .سپس این متن های الیت خواهد شد ،طوریکه می
لغت Openرا تایپ کرده و سپس دکمه ی enterرا روی صفحه کلید فشار دهید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
288
به این طریق یک آیتم دیگر اضافه کنید .این بار Saveرا به عنوان آیتم منو نایپ کنید:
همانطور که در باال مشاهده می کنید ،می توانید برای آیتم های منوی خود میانبرهایی ) (shortcutsاضافه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
289
آیتم Acceleratorرا جایگذاری کرده و سپس روی دکمه ی کوچک در سمت راست ردیف کلیک کنید .یک
دیالوگ باکس ظاهر می شود .در این دیالوگ باکس می توانید میانبر کلیدهای مورد نظر خود را تنظیم
یک Oدر باکس تایپ کنید که پس از آن Shift + Oظاهر خواهد شد .آیتم را Shiftرا از حالت انتخاب درآورده
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
290
روی OKکلیک کنید ،پس از آن این میانبر به آیتم های منوی جاوا افزوده خواهد شد:
برای اینکه مشاهده کنید تمام این برنامه کار می کند یا نه ،در منوی Openروی backکلیک کنید تا به حالت
های الیت در آید .اکنون کلیک راست کنید .از منوی ظاهر شده Events > Action > Action Performedرا
انتخاب کنید .این گزینه برای آیتم منو یک code stubایجاد خواهد کرد .خط زیر را برای کد وارد کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
291
برنامه ی خود را اجرا کرده و آن را امتحان کنید .روی File > Openکلیک کنید و پس از آن باید message
boxرا مشاهده کنید .روی OKکلیک کنید تا از این باکس خالص شوید .اکنون میانبر خود را امتحان کنید.
دکمه ی Ctrlروی صفحه کلید را نگه دارید و سپس حرف Oرا فشار دهید .مجددا منو ظاهر می شود.
برنامه را متوقف کرده و به code stubبازگردید .روی message boxکامنت بگذارید .آنچه انجام خواهیم
داد ،نوشتن یک کد برای نمایش دیالوگ باکس File Openمی باشد .سپس یک یوزر می تواند یک فایل را
برای باز شدن انتخاب کند .این مار را در بخش بعد انجام خواهیم داد .
در این بخش چگونگی نمایش دیالوگ باکس های Open Fileرا در جاوا مشاهده خواهید کرد .این کار توسط
به ویو Designبازگردید .در پالت NetBeansآیتم File Chooserرا قرار دهید که در زیر Swing
Windowsقرار دارد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
292
یک File Chooserرا به نزدیک فرم خود و نه در داخل آن درگ کنید و آن را درست زیر فرم و در منطقه ی
سفید قرار دهید .این برنامه در واقع روی فرم ظاهر نخواهد شد ،اما می توانید آن را در پنجره ی Inspector
مشاهده کنید:
نام پیش فرض File Chooserدر واقع jFileChooser1می باشد .روی jFileChooser1در پنجره ی
Inspectorراست کلیک کنید .از منوی ظاهر شده گزینه ی Change Variable Nameرا انتخاب کنید .وقتی
که دیالوگ باکس ظاهر می شودdb ،را به عنوان نام تایپ کنید:
روی OKکلیک کنید تا تغییر را تایید کنید .پنجره ی Inspectorباید مانند تصویر زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
293
نمایش دیالوگ باکس File Chooserبسیار ساده می باشد .برای آیتم Openدر منو به code stub
مثال
File Chooserما dbنامیده می شود .ما در حال استفاده از متود ShowOpenDialogاز گروه File
Chooserهستیم .در بین پرانتزهای ShowOpenDialogنام پنجره ای را تایپ کنید که قرار است دیالوگ
باکس را در خود داشته باشد .ما " "this formرا تایپ کرده ایم.
متد ShowOpenDialogیک مقدار را گزارش می دهد .این مقدار یک عدد صحیح می باشد .این مقدار به
شما می گوید که کدام دکمه در دیالوگ باکس کلیک شده استcancel ،: openو غیره .ما در حال ذخیره
سازی مقدار در متغیری به نام returnValهستیم و از این مقدار در یک لحظه استفاده خواهیم کرد.
اما برنامه ی خود را مجددا اجرا کنید .روی File > Openدر فرم خود کلیک کنید .یک دیالوگ باکس برای شما
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
294
متاسفانه تنها کاری که یک باکس Open Dialogueانجام می دهد انتخاب یک فایل می باشد – در واقع این
باکس چیزی را باز نمی کند .اگر می خواهید که یک فایل را باز کنید ،باید که کد را خودتان بنویسید .ما این کار
را به زودی انجام خواهیم داد .اما اکنون می توانیم نام و مسیر فایلی را که یک یوزر انتخاب کرده ،دریافت
کنیم.
مثال
بنابراین ما در حال استفاده از Swing classبه نام JFileChooserمی باشیم .با این گروه می توانید بررسی
کنید که کدام دکمه کلیک شده است .وقتی که یک نقطه ) (dotرا پس از JFileChooserتایپ می کنید،
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
295
APPROVE_OPTIONبه معنای گزینه هایی مانند دکمه های Yesیا OKمیباشد .بنابراین ما در حال
برای رسیدن به فایلی که توسط یوزر انتخاب شده است ،متودی به نام getSelectedFileوجود دارد .به
هرحال این برنامه به جای یک رشته ،یک آبجکت فایل بازمی گرداند .آبجکت Fileبخشی از گروه IOدر جاوا می
مثال
بنابراین فایل انتخاب شده توسط یوزر در آبجکت فایل که fileنامیده ایم ،خاتمه پیدا خواهد کرد .
برای انجام کار مفید با این برنامه (برای متال باز کردن فایل) ،نیاز به تبدیل آن به یک رشته می باشد:
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
296
این خط فقط از متود toStringاز آبجکت های Fileاستفاده می کند .ما نتیجه را در یک متغیر جدید به نام
برای نمایش نام فایل ،کامنت ها را از باکس پیغام خود حذف کنید و آن را به عنوان آخرین خط از IF
مثال
;)javax.swing.JOptionPane.showMessageDialog(FormObjects.this, file_name
از آنجایی که این خططوالنی است می توانید ،می توانید یک عبارت importبه باالی کد خود و زیر کدی که دارید،
اضافه کنید:
مثال
;import javax.swing.JOptionPane
اکنون خواندن آن کمی آسانتر است !اما اکنون کد شما باید به شکل زیر باشد :
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
297
برنامه ی خود را اجرا کرده و آن را امتحان کنید .برای مشاهده ی دیالوگ باکس روی File > Openکلیک کنید.
هر فایلی در کامپیوتر خود را انتخاب کرده و سپس روی Openکلیک کنید .باکس پیغام شما مانند تصویر زیر
خواهد بود:
قبل از اینکه برای باز شدن فایل انتخاب شده ،کد اضافه کنیم ،ممکن است متوجه شده باشید که Files of
Typeروی دیالوگ باکس فایل Openبر روی " "All filesتنظیم شده است .می توانید فایل های روی این
لیست را فیلتر کنید ،طوریکه یوزر می تواند فقط فایل های متن یا تصاویری با فرمت معین را باز کند (jpeg,
gif, png).
برای فیلتر کردن لیست" ، "Files of Typeدیالوگ باکس دارای addChoosableFileFilterمتود می باشد.
عبارت های importزیر را به باالی کد خود و درست زیر عبارت های دیگر ،طوریکه کد شما طوالنی نشود ،وارد
کنید:
مثال
;import javax.swing.filechooser.FileFilter
;import javax.swing.filechooser.FileNameExtensionFilter
برای تنظیم پسوند فیلتر نام فایل ،نیاز به ایجاد یک آبجکت FileFilterجدید دارید .خط زیر را درست قبل از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
298
مثال
خواهد شد .پس از یک کاما نام فایل هایی را تایپ می کنید که می خواهید نمایش داده شوند .در اینجا یک
پسوند فایل مناسب اما بدون کاما نیاز است .به عالمت های نقل قول دوتایی (") در باال دقت کنید.
شما می توانید بیشتر از یک پسوند اضافه کنید .فقط کافیست یک کاما تایپ و سپس فایل هایی را که قرار
زمانی که آبجکت فیلتر را تنظیم کرده اید ،می توانید از متود addChoosableFileFilterدر دیالوگ باکس
مجددا برنامه ی خود را اجرا کرده و نگاهی به دیالوگ باکس خود داشته باشید .روی پیکان در لیست رو به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
299
گزینه ی Text Filesرا انتخاب کنید .سپس دیالوگ باکس شما فقط فایل هایی را با پسوند .txtنمایش خواهد
داد.
اگر شما خط دیگری روی لیست می خواهید ( برای مثال نمایش فایل های) ، htmlمی توانید یک آبجکت
وقتی برنامه ی شما اجرا می شود ،لیست Files of Typeمانند زیر خواهد بود:
اکنون می توانیم کدی بنویسیم تا واقعا فایل را باز کنیم که این کار را در بخش بعد انجام خواهیم داد .
در واقع شما کدی را برای باز کردن یک فایل نوشته اید .این فرایند برای دیالوگ باکس open fileتفاوتی نمی
کند .و چون شما در حال حاضر گروه هایی را نوشته اید که یک فایل را باز و در آن نگارش می کنند ،می توانید
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
300
برای وارد کردن فایلی که تقریبا آن را نوشته اید ،نگاهی به پنجره ی propertiesدر سمت چپ NetBeans
داشته باشید ( .اگر نمی توانید این پنجره را ببینید ،روی آیتم منوی Windowدر باالی NetBeansکلیک
ورودی را برای پروژه ی فعلی خود باز کنید و روی آیتم librariesراست کلیک کنید:
از منوی ظاهر شدهAdd Project ،را انتخاب کنید .وقتی این کار را انجام می دهید دیالوگ باکس زیر را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
301
مطمئن شوید که Lookدر باکس باال بیانگر " "NetBeans Projectsمی باشد .اکنون به پایین رفته و پروژه
ی TextFilesخود را جایگذاری کنید .اینجا جایی است که گروه های شما که باز هستند و در یک فایل نگارش
می کنند .اکنون روی دکمه ی " "Add project JAR filesکلیک کنید .دیالوگ باکس بسته شده و شما به
NetBeansباز خواهید گشت .نگاهی به ورودی Librariesبرای پروژه ی فعلی خود داشته باشید ،مشاهده
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
302
اکنون که گروه ها را به پروژه ی خود اضافه کرده اید ،می توانید یک خط importبه باالی کد خود اضافه کنید:
مثال
;import textfiles.ReadFile
اگر به خاطر داشته باشیدReadFile ،گروهی بود که برای باز کردن یک فایل فرا خواندیم .نام پوشه ای که با
آن روبرو شدیم textfilesبود .اکنون گروه ReadFileرا وارد می کنیم و می توانیم از آن آبجکت های جدیدی
ایجاد کنیم.
مثال
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
303
کد درست همانی است که قبال برای باز کردن یک فایل متن استفاده کردیم :نام فایل را دریافت کرده و یک
آبجکت ReadFileجدید ایجاد کنید ،متود openFileرا که ایجاد کرده ایم ،فرا بخوانید و تمام خطوط را به
عنوان یک ردیف ) (arrayبازگردانده و سپس خواندن هر خط را مرور کنید .دقت کنید که همه ی خطوط را در
به هرحال موردی که نادیده گرفته شده ،پیغامی در بخش catchاز گروه try … catchمی باشد .باکس پیغام
خود را بین پرانتزهای catchحرکت دهید .بین پرانتزهای showMessageDialogیک پیغام مناسب اضافه
وقتی که کد را کامل کردید ،آن را امتحان کنید .باید با استفاده از منوی File > Openیک فایل باز کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
304
اگر بخواهید دیالوگ باکس Save Fileرا به جای Open Fileنمایش دهید ،می توانید مجددا از File
مثال
مجددا این برای نمایش دیالوگ باکس کافی می باشد .الزم نیست کار دیگری انجام دهید ،گرچه می توانید یک
مثال
برای نوشتن یک فایل ،یک عبارت importبه باالی کد خود اضافه کنید:
;import textfiles.WriteFile
سپس می توانید یک آبجکت WriteFileایجاد کنید .مجددا می توانید کد را همراه با یک بلوک، try … catch
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
305
دو خط آخر در کد باال داده را از بخش متن دریافت می کند و سپس در یک متغیر رشته به نام alltextقرار می
یک code stubبرای آیتم File > Saveدر منو ایجاد کنید .کد باال را به آن اضافه کنید .برنامه ی خود را اجرا
کرده و آن را امتحان کنید .در بخش textمتن جدیدی تایپ کنید .سپس در منوی خود روی File > Saveکلیک
کنید .وقتی که دیالوگ باکس " "Save Fileظاهر می شود ،نام فایل را تایپ کرده و سپس روی Saveکلیک
کنید .ایجاد شدن فایل خود و اینکه متنی را که تایپ کردهاید در بخش textوجود دارد ،را بررسی کنید.
این مقدمه ای بود برای فرم ها و آبجکت های فرم .ما ادامه خواهیم داد .در بخش نگاهی به دیتابیس ها
در این بخش در مورد دیتابیس های جاوا فرا خواهید گرفت .شما یک دیتابیس ساده با یک جدول ایجاد خواهید
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
306
یک JDBC APIوجود دارد که بخش برنامه نویسی است و JDBC Driver Managerکه برنامه های شما
JDBCبه شما اجاز ی اتصال به یک دامنه ی وسیع از دیتابیس ها را می دهد( Oracle, MySQLو غیره) ،اما
ما قصد استفاده از یک دیتابیس داخلی استفاده کنیم که از نرم افزار Java/NetBeansدریافت می کنیم.
این دیتابیس Java DBنامیده می شود ،ورژنی از Apache Derby.این برنامه روی یک سرور فرضی اجرا می
برای بررسی اینکه تمام موارد مورد نیاز را دارید ،تب Servicesرا در NetBeansبررسی کنید .اگر نمی توانید
تب Servicesرا مشاهده کنید ،روی Windowاز منوی NetBeansکلیک کنید .از منوی Windowگزینه ی
Servicesرا انتخاب کنید .پس از آن صفحه ای مانند تصویر زیر مشاهده خواهید کرد:
آیتم Databaseرا باز کنید تا آیتم Java DBو بخش Driversرا مشاهده کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
307
نظریه این است که سرور فرضی Java DBرا آغاز کرد اید و سپس دیتابیس ها را روی سرور ایجاد و اجرا کرده
اید .باید دیتابیس تنظیم شده ای به نام sampleوجود داشته باشد :اما اگر چنین دیتابیسی وجود نداشت،
در تصویر باال سه دیتابیس وجود دارد :یکی ، Sampleیکی test1و دیگریexams.
برای پروژه ی مربوط به این بخش قصد داریم که یک دیتابیس جدید تنظیم کنیم .سپس چگونگی اتصال به این
دیتابیس را با استفاده از کد جاوا فرا خواهید گرفت .دیتابیسی که ما ایجاد خواهیم کرد ،یک دیتابیس ساده
دارای یک جدول خواهد بود و نه دارای چند جدول متصل به هم .در واقع می توانید با استفاده از Java DB
چند جدول ایجاد کنید ،اما لزوما نمی خواهیم مسائل را پیچیده کنیم.
یک منو برای شما ظاهر خواد شد .گزینه ی Start Serverرا انتخاب کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
308
نگاهی به پنجره ی Outputداشته باشید ،چند پیغام را مشاهده خواهید کرد ( :اگر یک firewallدر حال اجرا
رمانی که سرور در حال اجرا می باشد ،می توانید دیتابیس هایی ایجاد کنید .در بخش بعد چگونگی انجام این
اکنون که سرور شما آغاز به کار کرده است ،می توانید جلوتر روید و یک دیتابیس ایجاد کنید.
برای ایجاد یک دیتابیس جدید مجددا روی Java DBکلیک راست کنید .از منوی ظاهر شده Create
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
309
وقتی که روی Create Databaseکلیک می کنید ،دیالوگ باکسی برای شما ظاهر خواهد شد:
در اولین باکس یک نام برای دیتابیس خود تایپ کنید .آن را Employeesبنامید .هر یوزرنیم و پسووردی که
می خواهید می توانید تایپ کنید ( .پسووردی که ک هک کردن آن سخت باشد ،نه مانند آنچه ما استفاده کرده
ایم).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
310
برای ایجاد دیتابیس خود روی OKکلیک کنید .این دیتابیس باید روی لیست ظاهر شود:
دیتابیس خود راست کلیک کنید .از منوی ظاهر شده گزینه ی Connectرا انتخاب کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
311
وقتی که یک اتصال برقرار می شود ،چند فولدر پیش فرض برای Tables, Viewsو Proceduresمشاهده
خواهید کرد (اگر صفحه ی شما شبیه به این نیست ،پایین تر را مشاهده کنید.):
برای ایجاد یک جد.ل جدید در دیتابیس خود ،روی فولدر Tablesراست کلیک کنید .از منوی ظاهر شده گزینه
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
312
اگر سه فولدر باال را مشاهده نکردید ،در عوض صفحه ای مشابه تصویر زیر خواهید داشت:
وقتی روی Create Table,کلیک کنید ،یک دیالوگ باکس مشابه تصویر زیر ظاهر خواهد شد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
313
از اینجا نه تنها نامی برای جدول خود تایپ خواهید کرد ،بلکه ستون هایی نیز برای جاول تنظیم خواهید کرد.
در Table Nameدر باال ،نام پیش فرض Untitledرا حذف کنید .نام جدید Workersرا برای جدول خود
تایپ کنید .سپس جدولی به نام Workersخواهید داشت که در دیتابیس Employeesقرار دارد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
314
اما از آنجایی که جدول هنوز هیچ ستونی درخود ندارد ،نمی توانید روی OKکلیک کنید .ما می خواهیم که
ID
First_Name
Last_Name
Job_Title
ستون IDیک عدد شناسایی خاص را حفظ خواهد کرد .این عدد یک ردیف را در جدول مشخص خواهد کرد .یک
ستون با یک داده منحصر به فرد در این جدول با عنوان Primary Keyوجود دارد .از آنجایی که این داده
(Primary Keyکلید اولیه) می باشد ،ستون باید داده را در خود نگه دارد :ستون نمی تواند یک مقدار پوچ را
در خود حفظ کند .یک مقدار پوچ یعنی هیچ اطالعاتی در آن وجود ندارد.
اگر دیالوگ باکس Create Tableمانند مورد اول می باشد ،پس در باکس مربوط به Keyیک تیک قرار دهید.
وقتی این تیک را قرار می دهید ،چک مارک برای Indexو Uniqueنیز ظاهر خواهد شد .اکنون در بخش
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
315
اکنون الزم است بدانید که چه نوع داده ای وارد ستون می شود .برای ستون Integers ،IDرا خواهیم داشت.
بنابراین اسکرول را حرکت دهید تا به Data Typeبرسید .روی Data Typeتایپ کنید که یک لیست رو به
پایین برای شما ظاهر خواهد شد .از این لیست Integersرا انتخاب کنید:
اگر دیالوگ باکس شما مشابه مورد دوم می باشد ،الزم است روی دکمه ی Add Columnکلیک کنید تا اولین
ستون از جدول خود را اضافه کنید .پس از آن یک دیالوگ باکس دیگر ظاهر خواهد شد .مانند تصویر زیر:
NAMEنام ستون در جدول می باشد ،مانندFirst_Name ، IDو غیره . TYPEعبارت است از DATA
TYPE, Integer, VARCHARو غیره .روی لیست رو به پایین کلیک کنید تا موارد بیشتری را مشاهده کنید.
سپس باکس های CONSTRAINTSرا مانند تصویر زیر انتخاب کرده و یا از حالت انتخاب خارج کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
316
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
317
اکنون در جدول ب اندازه ی کافی فضا برای ستون IDداریم .روی دکمه ی Add Columnدر سمت راست
کلیک کنید تا یک ستون جدید به جدول اضافه کنید .مقادیر زیر را برای این ستون وارد کنید (VARCHAR
Key: Unchecked
Index: Unchecked
Null: Unchecked
Unique: Unchecked
Size: 20
برای سومین ستون ستون در جدول خود نیر مقادیر زیر را وارد کنید:
Key: Unchecked
Index: Unchecked
Null: Unchecked
Unique: Unchecked
Size: 20
Key: Unchecked
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
318
Index: Unchecked
Null: Unchecked
Unique: Unchecked
Size: 40
وقتی که کار شما به پایان رسید ،دیالوگ باکس مربوط به Tableباید مانند تصویر زیر باشد:
وقتی که همه ی اطالعات را وارد کردید ،روی OKکلیک کنید .سپس جدول و ستون های جدول شما ایجاد
خواهند شد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
319
کار دیگری که باید انجام دهید ،افرودن رکوردها به جدول دیتابیس می باشد که این کار را در بخش بعد انجام
یک جدول دیتابیس مانند یک صفحه ی گسترده می باشد که دارای ستون و ردیف می باشد .هر ردیف در
جدول ما دارای سلول هایی (فیلدهایی) برای یک مقدار ،IDیک ( First Nameنام) ،یک ( Last Nameنام
خانوادگی) و یک ( Job Titleعنوان شغلی) می باشد .به طور مختصر چگونگی نوشتن کد مربوط به اضافه کردن
ردیف های جدیدی از اطالعات را به جدول فرا خواهید گرفت .اما می توانید از NetBeans IDEبرای افزودن
برای افزودن یک ردیف جدید به جدول خود ،روی نام جدول راست کلیک کنید .از منوی ظاهر شده گزینه ی
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
320
وقتی که روی View Dataکلیک می کنید ،یک پنجره ی جدید در NetBeansاصلی ظاهر خواهد شد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
321
از نیمه ی پایینی پنجره برای وارد کردن ردیف های جدید جدول استفاده کنید .نیمه ی باالیی برای SQL
(Commandsدستورات (SQLمی باشد (که به زودی پس از اتمام افزودن ردیف ها ،در مورد آنها بیشتر
فراخواهید گرفت(.
برای افزودن یک ردیف جدید ،روی آیکنی با عالمت به اضافه ی سبزرنگ در نیمه ی پایینی پنجره ،کلیک کنید:
وقتی که روی آیکن ردیف جدید کلیک می کنید ،یک دیالوگ باکس ظاهر می شود:
همانطور که مشاهده می کنید ،باکس های متن برای هر ستون در جدول ما وجود دارد .برای ستون IDاز شماره
گذاری ترتیبی استفاده می کنیم که از شماره ی 1شروع می شود .بنابراین IDردیف دوم جدول 2و IDردیف
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
322
سوم 3و غیره می باشد .اعداد شماره های ردیف ها نیستند :آنها در واقع مقادیر منحصر به فردی برای هر
فیلد IDمی باشند .ما می توانیم برای مقدار شماره ی IDمربوط به اولین ردیف از عدد 100شروع کنیم.
بنابراین دومین عدد ،101سومین عدد 102و به همین ترتیب بقیه ی ردیف ها می باشند.
داده های زیر را به عنوان اولین ردیف جدول خود وارد کنید:
ID: 1
نام :هلن
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
323
پس از اتمام کار روی OKکلیک کنید که به پنجره ی NetBeansباخواهید گشت .بنابراین اولین ردیف باید
ID: 2
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
324
ID: 3
ID: 4
پس از اینکه افزودن این ردیف ها به پایان رسید ،پنجره ی NetBeansمانند تصویر زیر خواهد بود:
در بخش قبل رکوردهایی را در جدول دیتابیس DBجاوا ایجاد کردید .در این بخش کمی به دستورات SQL
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
325
SQLمخفف Structured Query Languageمی باشد وراهی برای بررسی دیتابیس هاست .شما می توانید
گزینه های بیشتری شامل انتخاب رکدودها) ، (selectوارد کردن) ، (insertحذف) ،(Deleteآپدیت کردن
رکوردها) ، (Updateایجاد جدول ها و قرار دادن جدول ها را استفاده کنید .این ابزار ،ابزاری بسیار قدرتمند
می باشد.
SQLاز لغات کلیدی ساده ای برای انجام کار استفاده می کند .اگر می خواهید که همه ی رکوردها را از یک
جدول انتخاب کنید ،لغات SELECTو FROMهمراه با نماد "( all recordsهمه ی رکوردها) استفاده می
شوند:
اگر نگاهی به نیمه ی باالیی پنجره ی NetBeansداشته باشید ،عبارت SELECTرا مشاهده خواهید کرد که
این عبارت بیان می کند که همه ی رکوردها را از جدولی به نام Workersانتخاب کنید ( .بخش ADMINقبل
از نقطه ی مربوط به ، Workersموردی به نام Schemaمی باشد ،که ساختار داده را توصیف می کند ،به عالوه
در NetBeansیک عبارت SQLرا با کلیک کردن بر روی دکمه ی Runروی نوار ابزار ،اجرا کنید:
سپس نتیجه ی مربوط به عبارات SQLدر نیمه ی پایینی پجره نمایش داده می شود:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
326
عبارتWHERE
برای اینکه نتایج تحقیق خود را محدود کنید ،می توانید از عبارت WHEREبه همراه عبارت SELECT
استفاده کنید:
پس از لغت کلیدی WHEREنیاز به نام یک ستون از جدول خود دارید .سپس یک عالمت تساوی تایپ کنید
که با یک مقدار دنبال می شود .به عنوان مثال در اینجا یک عبارت SQLرا مشاهده می کنید که تمام برنامه
برای اینکه این عبارت SQLرا امتحان کنید ،روی نام جدول خود در بخش Servicesراست کلیک کنید .از
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
327
وقتی که روی Execute Commandکلیک کردید ،یک پنجره ی جدید ظاهر خواهد شد .عبارت SQLباال را
شما همچنین می توانید از لغت کلیدی LIKEبا عبارت WHEREاستفاده کنید .این عبارت جایگزین عالمت
تساوی می شود . LIKEمعموال به یک کاراکتر wildcardاستفاده می شود که کاراکتر wildcard %به معنای
هر کاراکتری می باشد ،به عنوان مثال وقتی که خط زیرین تنها برای یک کاراکتر استفاده می شود.
به جای عالمت تساوی یا لغت کلیدی LIKEاز اپراتورهای شرطی نیز می توانید استفاده کنید (بزرگتر از ،کمتر از
و غیره) .اگر یک ستون حقوق داشته باشیم ،می توانستیم تمام کارمندانی را جستجو کنیم که کمتر از 1000
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
328
تمرین
اکنون که عبارات SQLبرای شروع برنامه نویسی کافی می باشند ،این مبحث را رها می کنیم .به هرحال قبل لز
انجام این کار ،با کلیک راست کردن در بخش ،Servicesاتصال به جدول های خود را قطع کنید:
ما مجددا به این دیتابیس و جدول متصل خواهیم شد ،این بار از کد جاوا استفاده می کنیم .
در بخش های بعدی یک فرم جاوا ایجاد خواهید کرد که اطالعات را از یک دیتابیس بارگذاری می کند .این فرم
دارای گزینه های Nextو Previousمی باشد تا یک داده را طی کنید .رکوردهای فردی نیز در فیلدهای متن
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
329
نمایش داده خواهند شد .سپس دکمه هایی نیز برای آپدیت کردن ،حذف کردن و یا ایجاد یک رکورد جدید در
برای آغاز و به خاطر سادگی کار ،از یک پنجره ی terminal/consoleبرای خروجی نتایج از یک دیتابیس استفاده
خواهیم کرد.
بنابراین برای انجام این کار با کلیک کردن بر روی File > New Projectاز منوی NetBeansیک پروژه ی جدید
آغاز کنید .یک ( Java Applicationبرنامه ی جاوا) ایجاد کنید .پوشه را database_consoleو گروه اصلی
را DBConnectبنامید:
وقتی که روی Finishکلیک می کنید ،کد شما اید مانند زیر باشد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
330
اتصال به دیتابیس
برای اتصال به یک دیتابیس نیاز به آبجکت Connectionدارید .آبجکت Connectionاز یک
منتقل می شود.
توجه :
;import java.sql.Connection
;import java.sql.DriverManager
;import java.sql.SQLException
بنابراین DriverManagerدارای متودی به نام getConnectionمی باشد .این برنامه نیاز به نام میزبان
(که موقعیت دیتابیس شما می باشد) ،یک یوزرنیم و یک پسوورد دارد .اگر یک اتصال موفق باشد ،یک
شما می توانید آدرس میزبان را با نگاه کردن به تب Servicesدر سمت چپ NetBeansدریافت کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
331
jdbc:derby://localhost:1527/Employees
اولین بخش ،jdbc:derby://localhost ،نوع دیتابیس و سروری است که استفاده می کنید 1527 .شماره ی
پورت می باشد .دیتابیس Employeesمی باشد .تمام اینها می توانند در یک متغیر Stringقرار بگیرند:
دو رشته ی دیگر نیز برای نام کاربری و پسوورد اضافه می شوند:
این سه رشته را قبل از آبجکت اتصال وارد کنید ،کد شما مانند زیر خواهد بود:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
332
همانطور که در تصویر باال مشاهده می کنید ،زیر کد اتصال یک خط موج دار وجود دارد .دلیل این مسئله این
این DriverManagerاست که سعی دارد به دیتابیس متصل شود .اگر با شکست روبرو شود (به عنوان مثال
آدرس نادرست میزبان) ،یک خطای SQLExceptionبرای شما ظاهر می شود .الزم است برای رویارویی با این
خطا یک کد بنویسید .در کد زیر ،در عبارت try … catchبا خطا روبرو شده ایم:
{ try
}
{ ) catch ( SQLException err
;) ) (System.out.println( err.getMessage
}
بین پرانتزهای catchیک آبجکت SQLExceptionبه نام errتنظیم کرده ایم .سپس می توانیم از متود
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
333
عبارت try …catchباال را به کد خود اضافه کنید و چخار گوشه ی خطوط اتصال کد خود را بخش tryببرید .پس
اگر چنین اتفاقی افتاد به این معناست که به سرور دیتابیس خود متصل نشده اید .در این مورد در پنجره ی
Serviceروی Java DBکلیک راست کنید .از منوی ظاهر شده Start Serverرا انتخاب کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
334
الزم است که مطمئن شوید که firewallهایی که دارید ،اتصال به سرور را بالک نمی کنند .یک firewallخوب
فورا به شما پیغام می دهد که چیزی در تالش است که وارد شود و از شما می پرسد که آیا اجازه ی اتصال به آن
می دهید یا نه .وقتی که شما اجازه ی اتصال را می دهید پنجره ی خروجی NetBeansپیغام زیر را نمایش
خواهد داد:
"Apache Derby Network Server - 10.4.1.3 - (648739) started and ready to accept
زمانیکه سرور شما آغاز به کار کرد ،مجددا برنامه را اجرا کنید .دریافت یک پیغام خطای دیگر شانس خوبیست:
دلیل ظاهر شدن این پیغام خطا این است که DriverManagerبرای اتصال به دیتابیس نیاز به یک Driver
دارد ،درایورهایی مانند Client Driversو Embedded Drivers.شما می توانید یکی از اینها را وارد کنید تا
روی تب Projectsدر سمت چپ پنجره ی Servicesدر NetBeansکلیک کنید ).اگر نمی توانید تب
Projectsرا مشاهده کنید ،از نوار منو در باالی NetBeansعبارت Window > Projectsرا کلیک کنید(.
پروزه ی خود را جایگذاری کرده و ورودی را باز کنید .روی Librariesکلیک راست کنید .از منوی ظاهر شده
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
335
وقتی که روی Add Jar/Folderکلیک می کنید ،یک دیالوگ باکس ظاهر می شود .آنچه در اینجا انجام می
دهید ،افزودن یک فایل Java Archiveبه پروژه ی خود می باشد .اما فایل JARکه اضافه می کنید ،برای
دربی (derby) Client Driversمی باشد .بنابراین الزم است تا این فولدر را داخلی سازید .روی یک کامپیوتر
در حال اجرای ، windowsاین برنامه به شکل موقعیت زیر خواهد بود:
C:\Program Files\Sun\JavaDB\lib
فایلی که در حال جستجوی آن هستیدderbyclient.jar ،نامیده می شود .اگر نمی توانید آن را پیدا کنید ،یا از
یک سیستم عامل دیگر به غیر از ویندوز استفاده می کنید ،می توانید فایل را جستجو کنید .به موقعیت فایل
دقت کنید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
336
روی openکلیک کرده و فایل به کتابخانه ی پروژه ی شما اضافه خواهد شد:
اکنون که یک درایو Clientبه پروژه ی شما افزوده شده است ،برنامه ی خود را مجددا اجرا کنید .اکنون باید
هیچ خطایی دریافت نکنید ( .پنجره ی Outputعبارت Runو Build Successfulرا بیان خواهد کرد).
در بخش بعد آموزش دیتابیس جاوا را ادامه خواهیم داد .
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
337
اکنون که به دیتابیس متصل شده اید ،گام بعدی دست یابی به جدول در دیتابیس می باشد .به این خاطر نیاز
به اجرای یک SQL Statementو سپس اصالح همه ی ردیف ها و ستون هایی دارید که بازگردانده شده اند.
برای اجرای یک SQL Statementروی جدول خود ،یک آبجکت Statementتنظیم کنید .بنابراین این خط را به
;import java.sql.Statement
در بخش tryاز بلوک try … catchخط زیر را وارد کنید ) آن را درست در زیر خط Connectionوارد کنید.(:
در اینجا در حال ایجاد یک آبجکت Statementبه نام stmtهستیم .این آبجکت به یک آبجکت Connection
ما نیاز به یک عبارت SQLبرای آبجکت Statementهم داریم .بنابراین این خط را به کد خود اضافه کنید:
در عبارات باال همه ی رکوردها را از جدول دیتابیس به نام Workersانتخاب کنید.
می توانیم این SQL queryرا به متود از آبجکت Statementبه نام executeQueryانتقال دهیم .آبجکت
Statementکار جمع آوری همه ی رکورهایی را مه با queryما هماهنگ هستند ،آغاز می کند.
قبل از اینکه این موترد را توضیح دهیم ،خط زیر را به باالی کد خود اضافه کنید:
;import java.sql.ResultSet
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
338
بنابراین ResultSetبه عنوان rsمطرح می شود .این آبجکت تمام رکوردهای جدول دیتابیس را در خود حفظ
می کند .قبل از اینکه پیش روی کنیم ،در اینجا توضیحاتی در مورد ResultSetsرا مشاهده می کنید.
ResultSetدر جاوا
یک ResultSetراهی برای ذخیره و اصالح رکوردهای بازگردانده شده از یک SQL queryمی باشد .
ResultSetها سه نوع می باشند .نوعی که استفاده می کنید ،بستگی به کاری دارد که می خواهید با داده
انجام دهید:
.1آیا فقط می خواهید از طریق رکوردها پیش بروید ،از ابتدا تا انتها؟
.2آیا می خواهید از طریق رکوردها به جلو و عقب بروید و همچنین تغییرات ایجاد شده در رکوردها را
کشف کنید؟
.3آیا می خواهید از طریق رکوردها به جلو و عقب بروید اما به خاطر تغییرات ایجاد شده در رکوردها اذیت
نشوید؟
در لیست باال به نام ، TYPE_FORWARD_ONLY ResultSetعدد 1را تایپ کنید .عدد در لیست یک
TYPE_SCROLL_INSENSITIVEمطرح می شود.
از آنجایی که پرانتزها را خالی گذاشته ایمRecordSet ،پیش فرض را دریافت می کنیم که
TYPE_FORWARD_ONLYمی باشد .در بخش بعدی از یک نوع دیگر استفاده خواهیم کرد .اما از آنها به
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
339
بنابراین ابتدا لغت RecordSetرا تایپ کنید .بعد از یک نقطه) ، (dotنوع RecordSetمورد استفاده را تایپ
کنید.
به هرحال این مسئله در همین جا تمام نمی شود .اگر می خواهید از TYPE_SCROLL_SENSITIVEیا
ResultSetاز نوع Read Onlyاست یا قابل آپدیت شدن می باشد .این کار را با در ثابت داخلی شامل
ResultSet.CONCUR_READ_ONLY
ResultSet.CONCUR_UPDATABLE
مسئله ی دیگری که باید در مورد ResultSetsبه آن عادت کنیم ،موردی به نام Cursorمی باشد .یک
می کنیدCursor ،درست به قبل از اولین ردیف در جدول اشاره می کند .سپس از متودهایی برای اصالح
استفاده ازResultSet
وقتی که همه ی رکوردها را در یک ( Results setمجموعه از نتایج) دارید ،متودهایی وجود دارند که می
توانید برای اصالح رکوردهای خود استفاده کنید .در اینجا متودهایی را مشاهده می کنید که اغلب استفاده می
کنید:
نشانگر را در جدول شما به ردیف بعدی حرکت می دهد .اگر در جدول ردیف دیگری وجود نداشته باشد ،مقدار
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
340
ResultSetدارای متودهایی نیز می باشد که می توانید برای تشخیص یک ستون خاص ) (fieldدر یک ردیف
استفاده کنید .می توانید این کار را یا با استفاده از نام ستون و یا با استفاده از شماره ایندکس آن انجام
دهید .برای جدول Workersما چهار ستون تنظیم کرده ایم ،که دارای نام های زیر می باشند : ID,
First_Name, Last_Name, and Job_Title.بنابراین شماره های ایندکس عبارتند از 3 ،2 ،1و .4
ستون IDرا برای نگهداری مقادیر صحیح ) (Integerتنظیم کردیم .متودی که برای دریافت مفادیر صحیح در
در اینجا یک متغیر صحیح به نام id_colرا تنظیم کرده ایم .سپس از متود getIntاز آبجکت ResultSet
استفاده می کنیم که rsنامیده می شود .بین پرانتزها نام ستون را داریم که می توانستیم به جای آن از عدد
دقت داشته باشید که عدد ایندکس دارای عالمت نقل قول نمی باشد اما نام این نمادها را دارد.
برای سه ستون دیگر در جدول دیتابیس ،آنها را تنظیم کردیم تا ( Stringsرشته ها) را حفظ کنند .بنابراین نیاز
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
341
از آنجایی که ResultSet Cursorدرست به قبل از اولین رکورد در هنگام بارگذاری داده اشاره دارد ،الزم
است که از متود بعدی برای جابه جایی به اولین ردیف استفاده کنیم .کد زیر اولین رکورد را از جدول دریافت
می کند:
;) (rs.next
;)"int id_col = rs.getInt("ID
;)"String first_name = rs.getString("First_Name
;)"String last_name = rs.getString("Last_Name
;)"String job = rs.getString("Job_Title
دقت کنید که rs.nextدر ابتدای کد قرار می گیرد .این برنامه نشانگر را به اولین رکورد در جدول حرکت می
دهد.
شما می توانید برای نمایش رکورد در پنجره ی Outputیک خط چاپی به کد خود اضافه کنید:
System.out.println( id_col + " " + first_name + " " + last_name + " " + job
;)
اکنون کد شما باید مشابه زیر باشد ( خط چاپی را کمی تطبیق دادهایم زیرا کمی بلند می باشد:).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
342
اگر می خواهید تمام رکوردهای جدول را بررسی کنید ،می توانید از یک loopاستفاده کنید .از آنجایی که متود
بعدی trueیا falseرا بازمی گرداند ،می توانید از آن به عنوان شرطی برای یک while loopاستفاده کنید:
{ ) ) (while ( rs.next
}
در بین پرانتزهای whileمی توانیم rs.nextرا مشاهده کنیم .این امر تازمانی که نشانگر از آخرین رکورد در
جدول عبور نکرده باشد ،درست خواهد بود :اگر عبور کرده باشدrs.next ،مقدار falseرا گزارش می دهد و
while loopخاتمه خواهد یافت .با استفاده از ، rs.nextنشانگر نیز همراه یک رکورد در زمان جابجا خواهد
شد .در اینجا همان کد باال را مشاهده می کنید ،اما در حالیکه از while loopاستفاده می کند .کد خود را برای
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
343
وقتی کد باال را اجرا می کنید ،پنجره ی Outputباید مورد زیر را نمایش دهد:
اکنون که دیدگاهی در مورد چگونگی اتصال به جدول دیتابیس و نمایش رکوردها را دارید ،ما ادامه خواهیم
داد و با استفاده از فرم ها و دکمه ها یک برنامه ی پیچیده تر برای ورود به رکوردها خواهیم نوشت.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
344
آنچه در اینجا انجام خواهیم داد ،افزودن چهار دکمه به فرم می باشد .دکمه ها ما را قادر خواهند کرد تا از طریق
رکوردها به جلو برویم ،به عقب بازگردیم ،یا وارد اولین ویا آخرین رکورد شویم.
بنابراین یک پنل جدید به فرم خود اضافه کنید .آن را بزرگ کرده و سپس دکمه ها را به پنل اضافه کنید .نام
متن روی هر دکمه را به Next, Previous, Last, Firstتغییر دهید .سپس فرم شما چیزی مشابه تصویر زیر
خواهد بود:
شما با دکمه ی Nextدو کار می توانید انجام دهید :اول بررسی اینکه آیا رکورد دیگری وجود دارد تا به آن وارد
شوید و دوم اینکه اگر رکورد دیگری وجود دارد آن را در Text Fieldsنمایش دهید .برای این مسئله می
توانیم یک IF Statementایجاد کنیم .اما الزم است در یک بلوک try … catchقرار گیرد .بنابراین کد زیر را
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
345
مثال
try {
if ( rs.next( ) ) {
}
else {
rs.previous( );
JOptionPane.showMessageDialog(Workers.this, "End of File");
}
}
catch (SQLException err) {
JOptionPane.showMessageDialog(Workers.this, err.getMessage());
}
اگر رکورد دیگری وجود. را در یک زمان روی یک رکورد جابه جا می کندResultSet در واقعIF Statement
به، را به عقب بازمی گرداندesultSet در رکوردElse بخش. گزارش می شودfalse یک مقدار،نداشته باشد
: اضافه کنیمText Fields می توانیم کدی را برای نمایش رکورد در، IF Statement در آکوالدهای مربوط به
مثال
بنابراین، ( می توانستیم یک متود جدید ایجاد کنیم. داریمDoConnect این همان کدی است که در متود
7 واحد- طبقه دوم651 پالک- جنب بانک صادرات- باال تر از خيابان ملک- خيابان شريعتی- تهران: آدرس آموزشگاه
88146323 - 88446780 - 88146330
346
وقتی کد خود را اضافه کردید ،برنامه ی خود را اجرا کرده و آن را امتحان کنید .اگر به کلیک کردن روی دکمه ی
nextادامه دهید ،همه ی داده ها را در جدول مشاهده خواهید کرد .به هرحال در اینجا مشکلی وجود دارد.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
347
مشکل این است که ما یک خط rs.previousاضافه کرده ایم .به هرحال ما از نوع ResultSetپیش فرض
استفاده کرده ایم .همانطور که در آخرین بخش توضیح دادیم ،این خط به شما یک ResultSetارائه می دهد
که فقط می تواند به جلو حرکت کند .ما می توانیم از نوع پیشنهاد شده در پیغام خطا استفاده کنیم.
برنامه ی خود را متوقف کرده و به پنجره ی برنامه نویسی ) (coding windowخود بازگردید .در متود
(stmt = con.createStatement
مجددا برنامه ی خود را اجرا کنید .آنقدر روی دکمه ی Nextکلیک کنید تا به آخرین رکورد برسید .شما باید
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
348
در بخش بعد در مورد چگونگی بازگشتن به عقب از طریق رکوردهای دیتابیس صحبت خواهیم کرد .
به صفحه ی Designبرگردید و روی دکمه ی Previousدابل کلیک کنید تا یک code stubایجاد کنید.
به جای تایپ کردن مجدد تمام کد ،به سادگی کد را می توانید از دکمه ی Nextکپی و پیست کنید .سپس
دهید .همچنین می توانید متن پیغام خطا را از " "End of Fileبه ""Start of Fileتغییر دهید.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
349
برنامه ی خود را مجددا اجرا کنید .باید با کلیک کردن بر روی دو دکمه قادر به حرکت کردن به جلو و عقب در
روی دکمه ی Firstدابل کلیک کنید تا code stubایجاد کنید .اکنون کد زیر را اضافه کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
350
اکنون نیازی به IF ... ELSE Statementنداریم .تنها کاری که باید انجام دهیم حرکت نشانگر با rs.Firstبه
به مشابه کد زیر را به دکمه ی Lastخود اضافه کنید (می توانید این کد را برای دکمه ی Firstنیز کپی کنید).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
351
تنها تغییری که باید ایجاد شود ،استفاده از rs.Lastبه جای rs.Lastروی اولین خط می باشد .وقتی کد را
اضافه کردید ،برنامه ی خود را مجددا اجرا کنید .اکنون باید قادر به حرکت به آخرین رکورد و اولین رکورد در
دیتابیس خود باشید .در بخش بعدی به چگونگی آپدیت کردن یک رکورد خواهیم پرداخت .
فرم خود را کمی بلندتر سازید .اکنون یک پنل جدید به فرم خود اضافه کنید .یک دکمه ی جدید به پنل اضافه
کنید .نام پیش فرض متغیر را به btnUpdateRecordتغییر دهید .متن روی دکمه را به Update Record
تغییر دهید .ما همچنین قصد داریم دکمه هایی برای ایجاد یک رکورد جدید در دیتابیس برای ذخیره کردن،
کنسل کردن آپدیت ها و حذف یک رکورد ،داشته باشیم .بنابراین چهار دکمه ی دیگر به پنل اضافه کنید و
وقتی که کار شما انجام شد ،فرم شما باید مشابه تصویر زیر باشد (گرچه برای مرتب سازی مجدد دکمه ها آزاد
هستید:).
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
352
روی دکمه ی Updateدابل کلیک کنید تا یک code stubجدید ایجاد ایجاد کنیم.
اولین کاری که باید انجام دهیم ،دریافت متن از Text Fieldsمی باشد:
به هرحال اگر بخواهیم یک فیلد IDرا آپدیت کنیم ،نیاز به تبدیل Stringبه یک Integerداریم:
اکنون که همه ی داده ها را از Text Fieldsداریم ،می توانیم متودهای مرتبط آپدیت را از آبجکت ResultSet
فرا بخوانیم:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
353
تعداد کمی متودهای آپدیت وجود دارد .مورد باال از updateStringاستفاده می کند .اما الزم است که شما در
اینجا از جدول دیتابیس خود تایپ کنید .سه رشته ) (First_Name, Last_Name, Job_Titleو یک مقدار
بین پرانتزهای متودهای آپدیت ،نیاز به نام یک ستون از دیتابیس خود دارید ( گرچه این می تواند مقدار
ایندکس آن باشد .).پس از یک کاما ،داده ی جایگزین را تایپ کنید .بنابراین در مثال باال می خواهیم که
به هرحال متودهای آپدیت فقط ResultSetرا آپدیت می کنند .برای اعمال تغییرات به دیتابیس ،یک فرمان
;) (rs.updateRow
در اینجا تمام خطوط کد مربوط به آپدیت ResultSetو جدول دیتابیس را مشاهده می کنید:
{ try
;) rs.updateInt( "ID", newID
;) rs.updateString( "First_Name", first
;) rs.updateString( "last_Name", last
;) rs.updateString( "Job_Title", job
;) (rs.updateRow
;)"JOptionPane.showMessageDialog(Workers.this, "Updated
}
{ )catch (SQLException err
;) )(System.out.println(err.getMessage
}
مجددا الزم است آن را در عبارت try … catchقرار دهیم ،درست انگار اشتباهی رخ داده است .دقت کنید که
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
354
برنامه ی خود را اجرا کرده و آن را امتحان کنید .چند داده را در یک Text Fieldتغییر دهید ( به عنوان مثال
Tommyبه Timmy).سپس روی دکمه ی Updateکلیک کنید .رکورد را طی کرده و سپس به عقب
بازگردید .تغییرات هنوز باید وجود داشته باشند .اکنون برنامه ی خود را بسته و مجددا آن را اجرا کنید .باید
در بخش بعد به چگونگی اضافه کردن یک رکورد جدید را مشاهده خواهید کرد .
ما سه دکمه داریم که به رکوردهای جدید اشاره می کنند : New Record, Save New Recordو Cancel
New Record.دکمه New Recordفقط Text Fieldsرا پاک کرده و آن ها را برای داده ی جدید آماده می
سازد .ما می توانیم دکمه ی New Recordرا غیرفعال سازیم .کار دیگری که می توانیم انجام دهیم تهیه ی
یک یادداشت از رکوردی می باشد که اخیرا بارگذاری شده است .اگر یک یوزر تصمیم خود را عوض کند ،می
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
355
تواند همه ی دکمه ها را با کلیک کردن بر روی دکمه ی Cancelمجددا فعال سازد .با کلیک کردن بر روی دکمه
اگر این برنامه کمی گیج کننده است ،مورد زیر را امتحان کنید .روی دکمه ی Save New Recordکلیک کنید
تا آن را انتخاب کنید .در بخش Propertiesدر سمت راست ،پراپرتی Enabledرا قرار دهید:
تیک مربوط به باکس سمت راست enabledرا بردارید . Save New Recordغیرفعال خواهد شد .همین کار
را برای دکمه ی Cancel New Recordانجام دهید .این دکمه نیز غیرفعال خواهد شد .وقتی فرم شما
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
356
حتی اگر کدی برای این دو دکمه داشتید ،در صورت کلیک کردن روی هرکدام از آنها هیچ اتفاقی نخواهد افتاد.
وقتی دکمه ی New Recordکلیک می شود ،می توانیم دکمه های زیر را غیرفعال کنیم:
First Previous Next Last Update Record Delete Record New Record
به هرحال دکمه های Saveو Cancelمی توانند فعال شوند .اگر یوزر روی Cancelکلیک کند ،می توانیم
روی دکمه ی New Recordکلیک کنید تا یک code stubایجاد کنید .خطوط زیر را به آن اضافه کنید:
بنابراین با استفاده از پراپرتی setEnabledهفت دکمه خاموش شده و دو دکمه روشن می شوند.
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
357
ما می توانیم عکس این کار را برای دکمه ی Cancelانجام دهیم .به ویو Designبازگردید .روی دکمه ی
Cancel New Recordدابل کلیک کنید تا یک code stubجدید ایجاد کنید .موارد زیر را به آن اضافه
کنید:
اکنون برنامه را اجرا کرده و آن را امتحان کنید .روی دکمه ی New Recordکلیک کنید که فرم شما مانند
روی دکمه ی Cancel New Recordکلیک کنید که پس از آن فرم شما مانند تصویر زیر خواهد بود:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
358
کار دیگری که باید انجام دهیم ثبت ردیفی است که اخیرا بارگذاری شده است .به عبارت دیگر ردیفی که اخیرا
در Text Fieldsبارگذاری شده است .لزوم این کار به این خاطر است که قرار است Text Fieldsپاک شوند.
اگر دکمه ی Cancelکلیک شده باشد ،سپس کی توانیم داده ی حذف شده را مجددا بارگذاری کنیم.
متغیر عدد صحیح زیر را به باالی کد خود و درست زیر خطوط Connection, Statementو ResultSetاضافه
کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
359
برای درک این قضیه نشانگر به کدام ردیف اشاره می کند ،متودی به نام getRowوجود دارد .این متود به
شما اجازه می دهد تا شماره ی ردیفی را که نشانگر در حال خاضر روی آن است را ذخیره کنید:
تنها چیز دیگری که برای دکمه ی New Recordباید انجام دهیم ،پاک کردن Text Fieldsمی باشد .این کار
;)""(textFirstName.setText
;)""(textLastName.setText
;)""(textJobTitle.setText
;)""(textID.setText
از آنجایی که از متود ResultSetاستفاده کرده ایم ،الزم است که موارد را در یک بلوک try … catchقرار
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
360
برای دکمه ی ، Cancelنیاز به گرفتن ردیفی داریم که قبال بارگذاری شد و داده را در Text Fieldقرار داد.
برای بازگرداندن نشانگر به ردیفی که قبال به آن اشاره می کرد ،می توانیم از متود absoluteاستفاده کنیم:
متد absoluteنشانگر را به یک موقعیت ثابت در ResultSetحرکت می دهد .ما می خواهیم مقداری را که در
اکنون که نشانگر در حال اشاره به ردیف درست می باشد ،می توانیم داده ها را در Text Fieldsبارگذاری
کنیم:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
361
قرار دادن تمام این کد در بلوک ،try … catchکد زیر را به ما ارائه می دهد:
وقتی که افزودن کد مربوط به دکمه های Newو Cancelرا تمام کردید ،برنامه ی خود را اجرا کرده و آن را
امتحان کنید.
قبل از اینکه روی دکمه ی New Recordکلیک کنید ،فرم مانند زیر خواهد بود:
روی دکمه ی New Recordکلیک کنید تا Text Fieldsپاک شده را مشاهده کنید:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
362
با کلیک کردن روی دکمه ی ، Cancelداده را مجددا بارگذاری خواهید کرد:
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
363
اکنون که دکمه های Newو Cancelتنظیم شده اند ،می توانیم جلوتر برویم و داده ی وارد شده در فیلدهای
قبل از اینکه بتوانید یک رکورد جدید را ذخیره کنید ،باید که نشانگر را به بخشی به نام Insert Rowحرکت
دهید .این امر یک رکورد خالی در ResultSetایجاد می کند .سپس داده را به ResultSetاضافه می کنید:
مثال
;) (rs.moveToInsertRow
;)rs.updateInt("ID", newID
;)rs.updateString("First_Name", first
;)rs.updateString("Last_Name", last
;)rs.updateString("Job_Title", job
;) (rs.insertRow
به هرحال برای اعمال هرگونه تغییر در دیتابیس ،آنچه ما انجام خواهیم داد بستن آبجکت Statementو
آبجکت ResultSetمی باشد .سپس می توانیم هرچیزی را مجددا بارگذاری کنیم .اگر این کار را انجام ندهیم،
خطر اضافه نشدن رکورد جدید یا به ResultSetیا به دیتابیس وجود دارد( .این بستگی به نوع درایوری دارد
;) (stmt.close
;) (rs.close
کد مربوط به بارگذاری مجدد موارد ،همان کدی است که در هنگام اولین بارگذاری فرم نوشتید:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
;)ResultSet.CONCUR_UPDATABLE
;"String sql = "SELECT * FROM Workers
;)rs = stmt.executeQuery(sql
;) (rs.next
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
364
در اینجا در واقع کار متفاوتی انجام نمی دهید :فقط همه ی رکوردها را مجددا انتخاب کرده و اولین مورد را در
در اینجا کدی را مشاهده می کنید که یک رکورد جدید در دیتابیس ذخیره می کند ( واضح است که بیشترین
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
365
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
366
(مسئله ی دیگر این است که ستون IDباید منحصر به فرد باشد .به طور ایده آل ،شما مسیری برای دریافت
آخرین شماره ی IDو سپس اضافه کردن یک عدد به آن نوشته اید .دیتابیس های دیگر ،مانند ، MySqlدارای
یک مقدار AutoIncrementمی باشد برای مراقبت از این موارد .فقط اطمینان حاصل کنید که مقدار ID
مقداری نیست که قبال استفاده کرده اید ،در غیر اینصورت یک پیغام خطا دریافت خواهید کرد .یا مسیری برای
برنامه ی خود را اجرا کرده و آن را امتحان کنید .اکنون قادر هستید که رکوردهای جدید را در دیتابیس خود
ذخیره کنید.
در بخش بعدی در مورد حذف رکوردها فرا خواهید گرفت .
حذف یک رکورد می تواند کار آسانی باشد :کافیست از متود deleteRowاز ResultSetاستفاده کنید:
;) (rs.deleteRow
به هرحال Driverکه در حال استفاده از آن هستیم ،یک ردیف خالی در محل داده ای که حذف کرده ،به جا می
گذارد .اگر سعی کنید با استفاده از دکمه های Nextو Previousبه آن ردیف حرکت کنید ،فیلد متن IDدارای
0در خود خواهد بود و همه ی فیلدهای دیگر خالی خواهدن بود.
برای حل این مشکل ابتدا یک ردیف را حذف خواهیم کرد و مجددا آبجکت Statementو آبجکت های
ResultSetرا می بندیم .می توانیم همه ی داده ها را در فیلدهای متن مجددا بارگذاری کنیم .به این طریق
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330
367
برنامه را اجرا کرده و آن را امتحان کنید .اکنون قادر هستید که رکوردها را از دیتابیس خود حذف کنید.
اکنون شما دانش پایه برای نوشتن یک برنامه دیتابیس در جاوا با استفاده از GUIرا دارید .اگر مطالب این
آدرس آموزشگاه :تهران -خيابان شريعتی -باال تر از خيابان ملک -جنب بانک صادرات -پالک 651طبقه دوم -واحد7
88146323 - 88446780 - 88146330