آموزش قدم به قدم جاوا – قسمت ششم – بخش دوم

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

حلقه‌های تکرار (Loops)

گاهی اوقات در برنامه‌نویسی باید یک کار را چندبار تکرار کنیم. مثلا اگر 50 عدد داشته باشیم و بخواهیم مجموع آن‌ها را حساب کنیم باید یک دستور را 50 بار تکرار کنیم. بدیهی است که نمی‌توان برای این کار 50 دستور جمع را در کد نوشت! یا فرض کنید بخواهیم اسم 100 نفر را از کاربر دریافت کنیم. آیا باید 100 بار دستور دریافت ورودی از کاربر را بنویسیم؟

حلقه‌های تکرار کارهای تکراری را برای ما انجام می‌دهند. در جاوا دو نوع کلی حلقه تکرار داریم: for و while

حلقه تکرار for

شکل کلی این حلقه به صورت زیر است:

for (تغییرات شمارنده حلقه ; شرط تکرار حلقه ; تعریف شمارنده حلقه) {

}

ابتدا باید یک شمارنده برای حلقه خود تعریف کنیم. این شمارنده برای تعیین تعداد دفعاتی که حلقه قرار است اجرا شود (تعداد تکرار) به کار می‌رود.

سپس باید شرط تکرار حلقه خود را تعریف کنیم. تا وقتی که این شرط برقرار باشد (برابر با true باشد) حلقه تکرار خواهد شد. (معمولا این شرط عبارت است از مقایسه شمارنده حلقه با یک عدد خاص)

در آخر باید میزان تغییرات شمارنده حلقه خود را تعریف کنیم. مثلا اینکه در هر بار اجرای حلقه 1 واحد به شمارنده اضافه شود یا یک واحد از آن کم شود.

عملی که قرار است تکرار شود باید در بلاک حلقه (بین دو آکولاد آن) نوشته شود.

مثال:

در قسمت تعریف شمارنده، یک متغیر از نوع int به نام i تعریف کردیم که مقدار اولیه آن 0 است. (حتما باید مقدار اولیه را تعیین کنید.)

در قسمت شرط تکرار، عبارت i < 10 را قرار دادیم یعنی تا وقتی که مقدار شمارنده حلقه از 10 کوچکتر باشد این حلقه تکرار خواهد شد. (همانطور که می‌دانید عبارت i < 10 یک عبارت boolean بر می‌گرداند. تا وقتی که این عبارت true باشد حلقه تکرار خواهد شد.)

و در قسمت آخر هم تغییرات شمارنده را مشخص کردیم که در هربار اجرای حلقه 1 واحد به شمارنده حلقه اضافه شود.

این حلقه تکرار تنها کاری که انجام می‌دهد چاپ مقدار شمارنده خود است. اگر برنامه را اجرا کنید اعداد 0 تا 9 در پنجره کنسول چاپ خواهند شد.

 

نکته: اگرچه مقدار اولیه شمارنده حلقه الزاما نباید 0 باشد اما این کار در میان برنامه‌نویسان رایج‌تر است.

نکته: هنگام نوشتن شرط تکرار حلقه باید توجه داشته باشید که این شرط بالاخره باید false شود تا حلقه متوقف شود. اگر شرط تکرار حلقه همیشه برقرار باشد (true باشد) آنگاه حلقه بی‌نهایت بار تکرار می‌شود و در نتیجه برنامه اصطلاحا هنگ خواهد کرد.

نکته: حلقه for را به چند شکل می‌توان نوشت: مثلا می‌توان شمارنده حلقه را قبل از حلقه تعریف کرد یا مقدار شمارنده را داخل بلاک حلقه تغییر داد اما خواناترین شکل نوشتن آن به همین صورت است که دیدید.

حلقه تکرار while

از حلقه‌های while هنگامی استفاده می‌شود که تعداد دفعات تکرار حلقه دقیقا مشخص نیست. این حلقه شکل ساده‌تری نسبت به حلقه for دارد:

while (شرط تکرار حلقه) {

}

مانند حلقه for شرط تکرار حلقه while نیز باید یک عبارت boolean باشد. تا وقتی که این عبارت boolean برابر با true باشد حلقه تکرار می‌شود اما به محض این‌که false شود دیگر حلقه تکرار نخواهد شد.

عملی که قرار است تکرار شود باید در بلاک حلقه (بین دو آکولاد آن) نوشته شود.

مثلا حلقه زیر بی‌نهایت بار تکرار می‌شود چون شرط تکرار آن همیشه true است:

مثال:

در کد بالا:

متغیری با نام i و مقدار اولیه 10 تعریف کردیم.

شرط تکرار حلقه بزرگتر بودن مقدار i از 0 است.

در هربار تکرار حلقه یک واحد از i کم می‌شود. (اگر این کار را نکنیم آنگاه مقدار i همیشه از 0 بزرگتر خواهد بود و حلقه بی‌نهایت می‌شود.)

حلقه do while

این حلقه دقیقا مانند حلقه while است با این تفاوت که این حلقه تحت هر شرایطی حداقل یک بار اجرا خواهد شد، حتی اگر شرط تکرار آن از همان اول false باشد!

شکل کلی آن به صورت زیر است:

do {

} while (شرط تکرار حلقه);

مثال:

اگر به شرط تکرار این حلقه دقت کنید می‌بینید که این شرط اصلا برقرار نیست! اگر این حلقه را به شکل حلقه while معمولی می‌نوشتیم حتی یک بار هم اجرا نمی‌شد اما چون آن را در do while نوشتیم یک بار اجرا می‌شود و خروجی برنامه هم چاپ عدد 10 در کنسول است.

دستور break و continue

از این دو دستور برای ایجاد اختلال در روند عادی اجرای حلقه استفاده می‌شود اما با این دو دستور یک تفاوت با هم دارند:

break

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

مثال:

کار این حلقه چاپ اعداد 0 تا 99 است اما همانطور که می‌بینید در بدنه حلقه بعد از دستور چاپ یک دستور شرطی وجود دارد. این دستور شرطی بررسی می‌کند که آیا مقدار شمارنده حلقه برابر با 50 است یا خیر اگر بود آنگاه با دستور break به کلی از حلقه خارج شده و دیگر حلقه اجرا نخواهد شد.

بنابراین نتیجه اجرای کد فوق چاپ اعداد 0 تا 50 خواهد بود.

‌continue

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

مثال:

در بدنه حلقه ابتدا بررسی می‌شود که آیا مقدار شمارنده حلقه برابر با 5 است یا خیر. اگر بود آنگاه دستور continue اجرا شده و دیگر ادامه دستورات داخل حلقه اجرا نخواهد شد و قبل از آنکه کل بدنه حلقه اجرا شود حلقه به دور بعد می‌رود.

بنابراین نتیجه اجرای این برنامه به صورت زیر است:

0

1

2

3

4

6

7

8

9

همانطور که می‌بینید عدد 5 چاپ نشده وقتی شمارنده حلقه برابر با 5 بوده با دستور continue حلقه به دور بعد رفته است.

پس تفاوت break و continue در این است که دستور break کلا اجرای حلقه را متوقف می‌کند و از حلقه خارج می‌شود اما دستور continue تنها همان دور حلقه را متوقف می‌کند.

حلقه‌های تکرار تو در تو (Nested Loops)

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

مثال:

این برنامه می‌تواند به‌ خوبی نحوه کار حلقه‌های تو در تو را نشان دهد.

همانطور که می‌بینید شمارنده حلقه درونی را j نام‌گذاری کردیم. توجه داشته باشید که نام شمارنده حلقه‌‌های درونی نمی‌تواند با نام شمارنده حلقه‌های بیرونی آن یکی باشد.

در هر بار اجرای حلقه اول، حلقه درونی آن به طور کامل اجرا خواهد شد.

تفاوت دستور System.out.print با System.out.println این است که در println عبارت درون آن چاپ شده و سپس اشاره‌گر کنسول به خط بعد می‌رود. بنابراین دستورات چاپ بعدی در خط بعد چاپ خواهند شد اما در دستور print عبارت آن چاپ شده اما اشاره گر به خط بعد نمی‌رود، بنابراین دستورات چاپ بعدی در همان خط چاپ می‌شوند.

دستور چاپ خالی که بعد از حلقه درونی قرار دارد برای چاپ یک خط خالی به کار می‌رود.

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

0

01

012

0123

01234

012345

0123456

01234567

012345678

0123456789

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

مثال‌های بیشتر

در آخر برای فهم بهتر حلقه‌های تکرار چند مثال از آن‌ها می‌آوریم:

مثال 1 : چاپ اعداد زوج 0 تا 100

به تغییرات شمارنده حلقه دقت کنید که در هر بار اجرای حلقه دو واحد به آن اضافه می‌شود.

مثال 2 : چاپ مضرب‌های 5 و 3 از اعداد 1 تا 100 (اعدادی که هم بر 3 و هم بر 5 بخش پذیرند.)

مثال 3 : چاپ فاکتوریل یک عدد

 

مصطفی نصیری

دانشجوی نرم افزار هستم و علاقه شدیدی به برنامه نویسی مخصوصا با زبان جاوا دارم! در حال حاضر تمرکزم روی اندرویده. دوست دارم چیزایی که یاد میگیرم رو با بقیه به اشتراک بگذارم :)

همچنین ممکن است دوست داشته باشید ...

۵ واکنش

  1. fatemeh گفت:

    سلام…ممنون از آموزش های با جزئیات و کاملتون….میتونم بپرسم تا کی کل آموزشو رو سایت میزارید …من بیصبرانه منتظرم….

  2. حسین گفت:

    سلام،ممکن هست بگید کجا میشه تمام توضیحاتتون رو مشاهده کرد،منظورم اموزش قدم به قدم جاوا است لینک اون به ترتیب نیست اگه میشه لینک درستو به ایمیلم بفرستید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *