آموزش برنامه نویسی جاوا (بخش چهارم: حلقه های تکرار)

استاندارد

کدها در زبانهای برنامه نویسی مانند جاوا به ترتیب و خطی اجرا می شوند. به این معنی که از متد main شروع شده و خط به خط اجرا می شوند. حال ممکن است که حالاتی پیش بیاید که بخواهیم یک قسمت از کد چند بار اجرا شود. زبان های برنامه نویسی راه های مختلفی فراهم کرده اند که این نوع اجرا خطی را تغییر دهد. یکی از این راه ها حلقه های تکرار(loop) هستند. حلقه ها می توانند که یک سری دستورات را چندین بار اجرا کنند.

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

حلقه For ،حلقه While، حلقه Do While…

کار با حلقه ها بسیار جالب است و مطمئن باشید که در اکثر برنامه هایی که می نویسید حلقه های تکرار را به کار خواهید گرفت پس یکی از پرکاربرد ترین موضوعات برنامه نویسی حلقه ها هستند.

1- حلقه For

هر وقت تعداد تکرارهایمان را بدانیم و یا تعداد تکرار به تعداد مشخصی که آن تعداد در برنامه معلوم می شود، باشد، از حلقه For استفاده می کنیم.

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

for(initialization; Boolean_expression; update)
{
   //قطعه کد تکرار شونده
}

بخش های مختلف حلقه For را در الگوریتم بالا شرح می دهیم:

بخش initialization: این بخش فقط یک بار اجرا شده و باعث می شود که مقدمات اجرای حلقه فراهم شود. معمولا در آن متغیر معرفی می شود تا با آن متغیر بتوانیم تعداد حلقه های تکرار را مشخص کنیم.

بخش Boolean_expression: این بخش یک بخش کنترل است که اگر مقدار آن true باشد، حلقه ادامه پیدا کرده و در صورت false شدن از حلقه خارج می شویم.

بخش update: پس از هر بار اجرای حلقه، بخش update اجرا می شود. مثلا در این قسمت هر بار پس از اجرای حلقه یکی به مقدار متغیر اضافه شده تا وقتی شرط وسط نقض شود، از حلقه خارج شویم.

برای درک بهتر به مثال زیر توجه فرمایید:

public class Test {

   public static void main(String args[]) {

      for(int i = 30; i < 35; i = i+1) {
         System.out.print("value of i : " + i );
         System.out.print("\n");
      }
   }
}

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

value of i is : 30

value of i is : 31

value of i is : 32

value of i is : 33

value of i is : 34

2- حلقه While

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

while(عبارت شرطی)
{
   //دستورات حلقه که باید تکرار شوند
}

دستوری که در حلقه می نویسیم می تواند یک خط کد باشد و یا یک بلاک از کدهای چند خطی باشد. در قسمت عبارت شرطی می توانیم از یک متغیر که می خواهیم با نقض شدنش از حلقه خارج شویم باشد و یا چندین عبارت باشد!

برای درک بهتر به مثال زیر توجه فرمایید:

public class Test {

   public static void main(String args[]) {
      int i = 30;

      while( i < 35) {
         System.out.print("value of i : " + i );
         i++;
         System.out.print("\n");
      }
   }
}

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

value of i is : 30

value of i is : 31

value of i is : 32

value of i is : 33

value of i is : 34

همان طور که مشاهده می کنید، حلقه While در کد بالا همانند حلقه For عمل می کند. ولی همیشه این دو مثل یک دیگر نبوده و خیلی از اوقات نمی توان از هر دو استفاده کرد. با تکرار و تمرین در برنامه نویسی می توان کاملا به مبحث حلقه ها تسلط پیدا نمود.

3- حلقه Do ... While

این حلقه همان حلقه While است با این تفاوت که ابتدا کد داخل حلقه اجرا می شود و سپس شرط داخل حلقه برای ادامه ی تکرار حلقه چک می شود.

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

do
{
  //بدنه حلقه
} while(شرط حلقه);

برای درک بهتر به مثال زیر توجه فرمایید:

public class Test {

   public static void main(String args[]){
      int i = 30;

      do{
         System.out.print("value of i : " + i );
         i++;
         System.out.print("\n");
      }while( i < 35 );
   }
}

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

value of i is : 30

value of i is : 31

value of i is : 32

value of i is : 33

value of i is : 34

3- حلقه های تو در تو

گاهی اوقات لازم است که در یک حلقه، یک یا چند حلقه دیگر هم استفاده نمود.

معروفترین مثال برنامه نویسی در مورد حلقه های تودرتو، نمایش جدول ضرب اعداد است:

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int  i,j;

		for ( i = 1; i<=10 ; i++ )
		{
		    for ( j = 1; j<=10 ; j++ )
		    	System.out.print(i*j + "\t");
		    System.out.print("\n");
		}
	}

خروجی مثال بالا به شرح زیر است:

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

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

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

مثال ستاره:

می خواهیم در خروجی ستاره های زیر چاپ شوند:

*
**
***
****
*****
******
*******
********
*********
**********

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int  i,j;

		for ( i = 1; i<=10 ; i++ )
		{
		    for ( j = 1; j<=i ; j++ )
		    	System.out.print("*");
	    	System.out.print("\n");

		}
	}

دقت کنید که در شرط حلقه دوم، یعنی قسمت دوم از حلقه For که برای چک کردن شرط است، از عدد ثابتی استفاده نکردیم و از متغیر حلقه ی قبلی که خود در هر بار گردش حلقه، افزایش پیدا می کند، استفاده کرده ایم. بدین ترتیب با افزایش متغیر حلقه اول یعنی i، حلقه دوم به تعداد بیشتری گردش می کند و در نتیجه به تعداد بیشتری چاپ می شود.

می توان از حلقه های تو در تو، استفاده های زیادی نمود و به تعدادنامحدودی حلقه For به کار برد ولی این کار ممکن است برنامه شما را پیچیده کند و یا حتی نیازی نباشد که مثلا ده حلقه For در برنامه به کار ببریم. پس بسته به نیاز شما در برنامه نویسی از تعداد مشخصی حلقه For استفاده کنید.

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

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