دستورات تكرار iteration statements در جاوا (2)

دستورات تكرار iteration statements در جاوا (2)

دستورات تكرار iteration statements

دستورات تكرار در جاوا عبارتند از for، while،و do-while. اين دستورات آن چه را ما " حلقه " مي ناميم ، ايجاد مي كنند. حلقه يك مجموعه از دستورالعملها را بطور تكراري اجرا مي‌كند تا اينكه يك شرط پاياني را ملاقات نمايد.

For

حلقه for يك ساختار قدرتمند و بسيار روان است.

شکل کلی دستور For

for(initialization; condition; iteration; ){
// body
}

اگر فقط يك دستور بايد تكرار شود ، نيازي به ابروها نيست. وقتي كه حلقه براي اولين بار شروع مي شود بخش مقدار دهي اوليه در حلقه اجرا مي شود. معمولاً، اين بخش يك عبارت است كه مقدار متغير كنترل حلقه را تعيين مي كند، كه به عنوان يك شمارشگر، كنترل حلقه را انجام خواهد داد. مهم است بدانيم كه عبارت مقدار دهي اوليه فقط يك بار اجرا مي شود. سپس شرط مورد ارزيابي قرار مي گيرد. اين شرط بايد يك عبارت بولي باشد.

اين بخش معمولاً مقدار متغير كنترل حلقه را با مقدار هدف مقايسه مي كند. اگر عبارت صحيح (true) باشد، آنگاه بدنه حلقه اجرا خواهد شد. اگر ناصحيح باشد حلقه پايان مي گيرد. بعد، بخش تكرار (iteration) حلقه اجرا مي‌شود. اين بخش معمولاً عبارتي است كه مقدار متغير كنترل را افزايش يا كاهش مي دهد. آن گاه حلقه تكرار خواهد شد، ابتدا عبارت شرطي را ارزيابي مي كند، سپس بدنه حلقه را اجرامي كند و سرانجام عبارت تكرار را در هر گذر (pass) اجرا مي كند. اين روال آنقدر ادامه مي يابد تا عبارت شرطي ناصحيح (false) گردد.

نمومه ای از برنامه "tick" كه از يك حلقه for استفاده كرده است

// Demonstrate the for loop.
class ForTick {
public static void main(String args[] ){
int n;
for(n=10; n>0; n)--
System.out.println("tick" + n);
}
}

اعلان متغيرهاي كنترل حلقه داخل حلقه for

غالباً متغيري كه يك حلقه for را كنترل مي كند، فقط براي همان حلقه مورد نياز بوده و كاربري ديگري ندارد. در چنين حالتي، مي توان آن متغير را داخل بخش مقدار دهي اوليه حلقه for اعلان نمود.

برنامه ای كه متغير كنترل حلقه، يعني n به عنوان يك int در داخل حلقه for اعلان شده است.

// Declare a loop control variable inside the for.
class ForTick {
public static void main(String args[] ){

// here/ n is declared inside of the for loop
for(int n=10; n>0; n)--
System.out.println("tick" + n);
}
}

هنگامي كه يك متغير را داخل يك حلقه for اعلان مي كنيد، يك نكته مهم را بايد بياد داشته باشيد که قلمرو آن متغير زمانی كه دستور for انجام مي شود، پايان مي يابد.(يعني قلمرو متغير محدود به حلقه for است) اگر بخواهيد از اين متغير كنترل حلقه در جاي ديگري از برنامه استفاده كنيد، نبايد آن متغير را داخل حلقه for اعلان نماييد.

درشرايطي كه متغير كنترل حلقه جاي ديگري موردنياز نباشد، اكثر برنامه نويسان جاوا آن متغير را داخل for اعلان مي كنند.

برنامه‌ای كه به دنبال اعداد اول مي گردد.متغير كنترل حلقه، چون جاي ديگري مورد نياز نيست،داخل for اعلان شده است

// Test for primes.
class FindPrime {
public static void main(String args[] ){
int num;
boolean isPrime = true;

num = 14;
for(int i=2; i < num/2; i++ ){
if((num % i )== 0 ){
isPrime = false;
break;
}
}
if(isPrime )System.out.println("Prime");
else System.out.println("Not Prime");
}
}

استفاده از كاما Comma

شرايطي پيش مي آيد كه مايليد بيش از يك دستور در بخش مقدار دهي اوليه (initalization) و تكرار (iteration) بگنجانيد در این حالت از کاما استفاده می‌کنید.

class Sample {
public static void main(String args[] ){
int a, b;
b = 4;
for(a=1; a;,
,System.out.println("a = " + a);
,System.out.println("b = " + b);
b--;
}
}

همان طور که مي بينيد، حلقه توسط ارتباط متقابل دو متغير كنترل مي شود. از آنجايي كه حلقه توسط دو متغير اداره مي شود، بجاي اينكه b را به صورت دستي اداره كنيم، بهتر است تا هر دو را در دستور for بگنجانيم. براي اينكه دو يا چند متغير بتوانند يك حلقه for را كنترل كنند، جاوا این امكان را مي دهد تا چندين دستور را در بخشهاي مقدار دهي اوليه و تكرار حلقه for قرار دهيم. هر دستور را بوسيله يك كاما از دستور بعدي جدا مي‌كنيم.

حلقه for با استفاده از كاما

// Using the comma.
class Comma {
public static void main(String args[] ){
int a, b;

for(a=1; b=4;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
}

در اين مثال، بخش مقدار دهي اوليه، مقادير aو b را تعيين مي‌كند. هربار كه حلقه تكرار مي شود، دو دستور جدا شده توسط كاما در بخش تكرار (itration) اجرا خواهند شد.

نتیجه برنامه فوق به صورت زیر خواهد بود

a=1
b=4
a=2
b=3

نكته : در زبان های C++/C علامت كاما يك عملگر است كه در هر عبارت معتبري قابل استفاده است. اما در جاوا، علامت كاما يك جدا كننده است كه فقط در حلقه for قابل اعمال مي باشد .

برخي گوناگونيهاي حلقه for

حلقه for از تعدادي از گوناگوني ها پشتيباني مي‌كند كه قدرت و كاربري آن را افزايش مي‌دهند. دليل انعطاف پذيري آن ، این است كه لزومي ندارد كه سه بخش مقداردهي اوليه، آزمون شرط و تكرار، فقط براي همان اهداف مورد استفاده قرار گيرند.

يكي از رايج ترين گوناگوني ها مربوط به عبارت شرطي است. به طور مشخص، لزومي ندارد اين عبارت، متغير كنترل حلقه را با برخي مقادير هدف آزمايش نمايد. در حقيقت، شرط كنترل كننده حلقه for ممكن است هر نوع عبارت بولي باشد.

+ boolean done = false;
+
+ for(int i=1; !done; i++ ){
+ //...
+ if(intettupted ))(done = true;
+ }

در اين مثال، حلقه for تا زماني كه متغير بولي done معادل true شود، اجرا را ادامه خواهد داد . اين مثال مقدار i را بررسي نمي‌كند.

// Parts of the for loop can be empty.
class ForVar {
public static void main(String args[] ){
int i;
boolean done = false;

i = 0;
for (; !done; ) {
System.out.println("i is" + i);
if(i == 10 )done = true;
i++;
}
}
}

در اينجا عبارت هاي مقدار دهي اوليه و تكرار به خارج ازfor انتقال يافته اند. برخي از بخشهاي حلقه for تهي هستند. اگر چه در اين مثال ساده چنين حالتي هيچ ارزشي ندارد، اما در حقيقت شرايطي وجود دارد كه اين روش بسيار كارا و سودمند خواهد بود. به عنوان مثال، اگر شرط اوليه به صورت يك عبارت پيچيده و در جاي ديگري از برنامه قرار گرفته باشد و يا تغييرات متغير كنترل حلقه به صورت غير ترتيبي و توسط اعمال اتفاق افتاده در داخل بدنه حلقه تعيين شود، پس بهتر است كه اين بخش ها را در حلقه for تهي بگذاريم.

كي ديگر از گوناگوني هاي حلقه for چنین است که اگر هر سه بخش حلقه for را تهي بگذاريد ، آن گاه يك حلقه نامحدود ( حلقه اي كه هرگز پايان نمي‌گيرد ) ايجاد كرده ايد.

for (; ; ) {
//...
}

اين حلقه تا ابد ادامه خواهد يافت، زيرا هيچ شرطي براي پايان گرفتن آن تعبيه نشده است. اگر چه برخي برنامه ها نظير پردازش هاي فرمان سيستم عامل مستلزم يك حلقه نامحدود هستند، اما اكثر حلقه هاي نامحدود در واقع حلقه هايي هستند كه ملزومات پايان گيري ويژه اي دارند.

حلقه هاي تودرتو

نظير كليه زبان هاي برنامه نويسي، جاوا نيز امكان تودرتو كردن حلقه ها را دارد. يعني يك حلقه داخل حلقه ديگري قرار خواهد گرفت.

یک حلقه تودرتو از for

+ // Loops may be nested.
+ class Nested {
+ public static void main(String args[] ){
+ int i/ j;
+
+ for(i=0; i<10; i++ ){
+ for(j=i; j<10; j++)
+ System.out.print(".");
+ System.out.println)(;
+ }
+ }
+ }



نظرات کاربران



عبارت امنیتی : حاصل 5 × 6 می شود :
متن پیام :