حلقهها مانند شرطها جزء لا ینفک هر برنامهای هستند و وظیفه تکرار عملی خاص را دارند. حلقهها گاه به تعداد مشخصی تکرار شده و برخی اوقات به تعداد نا مشخصی تکرار میشوند و اتمام تکرار عملیات تابع شرایط خاصی است.
البته حلقهها نیز انواع مشخصی دارند که در ادامه به تعریف انواع حلقهها میپردازیم.
حلقه for
دستور for سه پارامتر ورودی دارد که در زیر با ذکر یک مثال آنها را بیان میکنیم:
for(int i=1; i < 11; i++){
Log.i("for loop item", "" + i);
}
در پارامتر اول که int i=1
است ما یک متغیر به نام i به عنوان شمارنده حلقه for تعریف میکنیم.
در پارامتر دوم که به صورت i < 11
است، شرط ادامه حلقه را اعلام کردیم و میگوییم حلقه درون for تا زمانی ادامه پیدا میکند که i کوچکتر از 11 باشد.
در پارامتر سوم با i++
شمارنده i را در هر بار اجرای حلقه یک گام به جلو میفرستیم. حلقه فوق را اگر در مجازی ساز اندروید اجرا کنید نتیجه مانند زیر خواهد بود:
حلقه while
این حلقه ساختار خاصی دارد و با ذکر یک مثال آن را شرح میدهیم:
int i= 0;
while(i < 11){
Log.i("while loop item", "" + i);
i++;
}
حلقه while فوق فقط یک پارامتر ورودی دارد و آن هم شرط بررسی سایز متغیر i است. این حلقه تا زمانی که i کوچکتر از 11 باشد اجرا خواهد شد.
البته در سطر چهارم با دستور i++;
پارامتر iای را که در خط اول به میزان صفر مقدار دهی کردیم افزایش میدهد. نتیجه اجرای دستور فوق در محیط توسعه به شکل زیر خواهد بود:
حلقه do while
اگر دقت کرده باشید دو حلقه فوق ممکن است حتی یکبار هم اجرا نشوند و شرط همیشه در ابتدای کار چک میشود. مثلا به حلقه for زیر دقت کنید:
for(int i= 5; i > 6; i++){
Log.i("Log title", "This Log not shown");
}
حلقه فوق به هیچ وجه اجرا نمیشود چون مقدار اولیه آن 5 است و شرط اجرای حلقه این است که مقدار i بزرگتر از 6 باشد.
حلقه do while بر عکس دو نوع حلقه فوق حتما یک بار اجرا خواهد شد. ساختار این حلقه به شکل زیر است:
int i= 0;
do{
Log.i("do while loop", "" + i);
i++;
}while(i < 5);
حلقه فوق برای بار اول حتما اجرا میشود ولی پس از هر بار تکمیل اجرا یک بار شرط حلقه در سطر آخر چک میشود، اگر شرط بر قرار باشد یک بار دیگر حلقه اجرا میشود ولی اگر نباشد اجرای حلقه پایان میپذیرد. اجرای این حلقه به شکل زیر خواهد بود:
دام حلقه بی نهایت
گاهی بدلیل خطاهای برنامه نویسی، حلقهای توسط برنامه نویس طراحی میشود که پس از این که شروع به کار کند هیچ وقت متوقف نمیشود. این حلقهها به احتمال قوی منجر به متوقف شدن برنامه میشوند و در پیاده سازی آنها باید دائما محتاط باشید. مثال زیر را ببینید:
int i= 0;
while(i < 11){
Log.i("while loop item", "" + i);
}
حلقه فوق با i برابر صفر شروع به کار میکند و هیچ وقت متوقف نمیشود چون درون حلقه while دستوری وجود ندارد که مقدار i را تغییر دهد. حلقه فوق معادل حلقه زیر است:
while(true){
Log.i("while loop item", "" + i);
}
در حلقه while فوق درون حلقه دائما true و صحیح است.
دو دستور ویژه break و continue
دستور break اجرای حلقه را متوقف و برنامه را به خارج از حلقه منتقل میکند. مثال while(true)
فوق را با دستور break اصلاح میکنیم:
int i= 1;
while(true){
Log.i("while loop item", "" + i);
if(i > 5){
break;
}
i++;
}
حلقه فوق در سطر پنج با شرط i > 5
بررسی میشود که اگر بر قرار باشد حلقه متوقف میشود. نتیجه اجرای حلقه فوق مانند زیر است:
دستور continue درون حلقه اجرای خطهای بعد از خود را متوقف و دوباره از نو حلقه را اجرا میکند. مثال زیر را ببینید:
int i= 1;
while(true){
i++;
if(i < 3){
continue;
}
Log.i("while loop item", "" + i);
if(i > 5){
break;
}
}
نتیجه اجرای دستور فوق به شرح زیر است:
ارقام یک و دو در نتیجه بالا وجود ندارند چون یک شرط داشتیم که برای iهای زیر 3 با اجرای دستور continue کنترل حلقه به ابتدا برود.
آرایهها در زبان Java
تا پیش از این یاد گرفته بودیم برای ذخیره رشتهها و یا کاراکترها از متغیر استفاده کنید، ولی در این قسمت قصد داریم به شما متغیری را معرفی کنیم که در آن بتوانید اطلاعات بیشتری را ذخیره کنید.
آرایهها در واقع ماتریسی از دادهها هستند که اطلاعات را ساختار یافته در خود ذخیره میکنند. برای فهم بیشتر ساختار آرایه میتوانید آنها را به صورت یک جدول از دادهها تصور کنید که هر سطر و ستون آن دارای اطلاعات مورد نظر باشد.
در پایین یک آرایه با نام myArray تعریف میکنیم:
int[] myArray;
یک آرایه با نام myArray که مقادیر درون آن از نوع int هستند ایجاد کردیم.
از آن جا که آرایهها معمولا طول مشخصی دارند در پایین آرایه myArray را شش عددی تعریف میکنیم:
int[] myArray = new int[6];
در کد پس از تعریف آرایه از نوع int و نام myArray بعد از مساوی اعلام میکنیم این آرایه حداکثر شش آیتم از نوع int دارد.
به کدهای زیر توجه کنید:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] myArray= new int[6];
myArray[0]= 1;
myArray[1]= 2;
myArray[2]= 3;
myArray[3]= 4;
myArray[4]= 5;
myArray[5]= 6;
Log.i("myArray", "" + myArray[0]);
Log.i("myArray", "" + myArray[5]);
}
توجه کنید مقدار دهی عناصر آرایه از صفر شروع میشود. یعنی در بالا ابتدا مقدار اولین آیتم آرایه و سپس مقدار آخرین آیتم آرایه نمایش داده میشود.
کدهای فوق را میتوان به صورت زیر نیز باز نویسی کرد:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] myArray= {1, 2, 3, 4, 5, 6};
Log.i("myArray", "" + myArray[0]);
Log.i("myArray", "" + myArray[5]);
}
در سطر شش کل آیتمها را بین دو براکت گذاشتیم.
در مثال زیر با حلقه for آرایه myArray را پیمایش میکنیم:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] myArray= {1, 2, 3, 4, 5, 6};
for (int i=0; i < myArray.length; i++){
Log.i("myArray", "" + myArray[i]);
}
}
در سطر هفتم با استفاده از myArray.length طول آرایه را بدست میآوریم. نتیجه خروجیهای چاپ اعداد یک تا شش است.
آرایههای چند بعدی در جاوا
آرایههایی که در بالا معرفی کردیم تک بعدی بودند. آرایههای چند بعدی مانند تعریف چند آرایه تو در تو هستند. در زیر تصویر یک ماتریس سه در سه را میبینید:
به نحوه شماره گذاری آیتمها توجه کنید. سطر اول به صورت 00 و 01 و 02 شماره گذاری شده است، سطر دوم به صورت 10 و 11 و 12 و سطر سوم به صورت 20 و 21 و 22 شماره گذاری شده است. بنابراین عدد اول شماره سطر و عدد دوم شماره ستون این ماتریس را تشکیل میدهند.
مثال زیر را ببینید:
int[][] myArray= new int[3][3];
myArray[0][0]= 1;
myArray[0][1]= 2;
myArray[0][2]= 3;
myArray[1][0]= 4;
myArray[1][1]= 5;
myArray[1][2]= 6;
myArray[2][0]= 7;
myArray[2][1]= 8;
myArray[2][2]= 9;
در سطر اول یک آرایه به صورت [3][3] تعریف کردیم. به این آرایه یک آرایه سه در سه میگویند که در سطرهای بعدی مقدار دهی این آرایه را مشاهده میکنید.
آرایه با طول نا مشخص در جاوا
در بالا تنها آرایههایی را میتوانید تعریف کنید که از قبل مقدار آنها را بدانید. در این بخش قصد داریم به کمک ArrayList آرایههایی را ایجاد کنیم که انعطاف پذیری بالایی دارند و میتوانیم تعداد مقادیر آنها را تغییر داد. مثال زیر را ببینید:
ArrayList myArrayList = new ArrayList();
در بالا یک آرایه از نوع ArrayList با نام myArrayList ایجاد کردیم. با استفاده از متد add میتوانیم آیتمهای این آرایه را اضافه کنیم:
ArrayList myArrayList = new ArrayList();
myArrayList.add("apple");
Log.i("myArrayList", "" + myArrayList.get(0));
همانطور که در بالا دیدید اولین آیتمی که به آرایه اضافه کردیم مقدار رشتهای apple بود. برای فراخوانی این مقدر بدلیل این که اولین آیتم است و اندیس آن صفر است از متد get با مقدار صفر استفاده کردیم.
به راحتی میتوان با متد remove هر آیتمی را از آرایه حذف کرد. مانند:
ArrayList myArrayList = new ArrayList();
myArrayList.add("apple");
myArrayList.remove(0);
در سطر دوم مثال بالا ابتدا آیتم apple را اضافه کردیم و در سوم آن را با متد remove حذف کردیم.
در ادامه با ما همراه باشید.