در آموزش گذشته به بررسی نحوۀ مرتبسازی اِلِمانهای یک آرایه با فراخوانی متد ()sort
پرداختیم اما در این آموزش قصد داریم تا ببینیم چگونه میتوان اِلِمانهای داخلی یک آرایه را با یکدیگر جمع کرد که برای درک بهتر این موضوع سناریویی بدین صورت تعریف میکنیم که در آن برنامهای مینویسیم تا بتوانیم میانگین درآمد ماهیانۀ سال گذشته خود را محاسبه نماییم.
بنابراین ابتدا پروژهای تحت عنوان Income ایجاد کرده سپس یک کلاس جدید تحت عنوان MonthlyPaymentAverage
داخل آن میسازیم و با استفاده از دیتا تایپ int
آرایهای به منظور ذخیرۀ میزان درآمد خود در هر ماه تعریف میکنیم و بدین ترتیب کدی به صورت زیر خواهیم داشت:
public class MonthlyPaymentAverage {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
}
}
در کد فوق، به منظور تعریف آرایهای از جنس عدد صحیح به نام monthNames
ابتدا دیتا تایپ int
را نوشته سپس علائم []
را قرار داده و در ادامه نام آرایه را ذکر میکنیم سپس اپراتور =
را نوشته و با استفاده از کیورد new
به همراه دیتا تایپ int
و عدد 12 داخل علائم []
در مقابل آن به کامپایلر دستور میدهیم تا آرایۀ جدیدی به نام monthNames
متشکل از 12 اِلِمان از نوع دادۀ عدد صحیح بسازد سپس اعداد مورد نظر خود را به اندیس متناظرشان اختصاص میدهیم بدین معنی که دستور سطر چهارم عدد 500/000 به اندیس 0 از آرایۀ monthNames
اختصاص یافته و به همین ترتیب اعداد بعدی نیز در جایگاه مورد نظر از آرایۀ مذکور نگهداری میشوند (نکتۀ قابلتوجه در ارتباط با نام ماههای سال است که در این مثال از عدد 0 شروع کردهایم و به ترتیب هر یک از آنها را برای ماههای فروردین، اردیبهشت، خرداد و الی آخر در نظر گرفتهایم.)
حال با استفاده از دیتا تایپ int
متغیری تحت عنوان total
با مقدار اولیۀ 0 تعریف میکنیم که قرار است تا مقدار حاصل از جمع اِلِمانهای آرایه را در آن ذخیره نماییم و در ادامه یک حلقۀ for
جهت پیمایش درآمد مربوط به هر یک از دوازده ماه سال تعریف میکنیم تا بتوانیم مقادیر منتسب به هر یک از اندیسهای آرایه را پیمایش کرده، آنها را با هم جمع کرده و در نهایت از مقدار حاصل میانگین بگیریم.
در همین راستا، داخل حلقۀ for
و با استفاده از دیتا تایپ int
متغیری تحت عنوان counter
با مقدار اولیۀ 0 تعریف میکنیم که به منزلۀ نقطۀ آغازین حلقه میباشد سپس شرط پایان حلقه یا به عبارتی نقطۀ پایان حلقه را بدین صورت تعریف میکنیم که حلقۀ for
تا زمانی تکرار شود که مقدار منتسب به متغیر counter
کوچکتر از عدد 12 باشد و در نهایت پارامتر سوم معادل مقدار افزایشی متغیر counter
در هر بار تکرار حلقه را برابر با یک واحد تعریف میکنیم و بدین ترتیب حلقۀ for
به تعداد 12 مرتبه تکرار شده و در هر بار نیز یک واحد به متغیر counter
افزوده میشود که در این مرحله کدی به صورت زیر داریم:
public class MonthlyPaymentAverage {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
int total = 0;
for (int counter = 0; counter < 12; counter++) {
}
}
}
اکنون میخواهیم دستوری در حلقۀ فوق بنویسیم تا در هر بار تکرار آن، مقادیر هر یک از اِلِمانهای حلقه را با مقادیر قبلیِ منتسب به متغیر total
جمع کرده و مقدار جدید را بدان اختصاص دهد که برای این منظور کد فوق را به صورت زیر تکمیل میکنیم:
public class MonthlyPaymentAverage {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
int total = 0;
for (int counter = 0; counter < 12; counter++) {
total += monthNames[counter];
}
System.out.println(total);
}
}
همانطور که میبینیم، در سطر هجدهم ابتدا نام متغیر total
را نوشته و علامتهای =+
را در مقابل آن قرار دادهایم و در ادامه دستوری به صورت [monthNames[counter
درج کرده بدین معنی که در هر بار تکرار حلقه و افزایش مقدار منتسب به متغیر counter
به ترتیب هر یک از اِلِمانهای مندرج در آرایه با شروع از اندیس 0 استخراج شده و با مقدار قبلیِ منتسب به متغیر total
جمع شده و مجدداً مقدار جدید به این متغیر اختصاص داده شود. در ادامه، متغیر total
را به عنوان آرگومان ورودی به متد ()println
میدهیم تا مقدار حاصل از جمع اِلِمانهای آرایۀ monthNames
را در کنسول چاپ کند. بنابراین با اجرای برنامۀ فوق در خروجی خواهیم داشت:
14250000
حال به منظور محاسبۀ میانگین درآمد ماهیانه نیاز داریم تا عدد به دست آمده را بر عدد 12 تقسیم کنیم تا میانگین درآمد ماهیانه در یک سال محاسبه شود که برای این منظور کد فوق را به شکل زیر تکمیل میکنیم:
public class MonthlyPaymentAverage {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
int total = 0;
for (int counter = 0; counter < 12; counter++) {
total += monthNames[counter];
}
int avarageIncome = total / 12;
System.out.println("Your avarage income is " + avarageIncome);
}
}
در کد فوق، با استفاده از دیتا تایپ int
متغیری دیگر تحت عنوان avarageIncome
تعریف کرده و مقدار حاصل از تقسیم مقدار منتسب به متغیر total
بر عدد 12 را بدان اختصاص دادهایم سپس متغیر avarageIncome
را به عنوان آرگومان ورودی به متد ()println
میدهیم تا مقدار میانگین درآمد ماهیانه در طول یک سال را با همراه استرینگ «Your average income is» کانکت کرده و در کنسول چاپ کند که پس از اجرای برنامه خروجی زیر را مشاهده خواهیم کرد:
Your avarage income is 1187500
اکنون که با مفهوم آرایهها در زبان برنامهنویسی جاوا آشنا شدهایم، در ادامه قصد داریم تا نوع دیگری از حلقههای for تحت عنوان Enhanced for Loop و کاربرد آن در پیمایش اِلِمانهای یک آرایه را مورد بررسی قرار دهیم.
آشنایی با حلقههای Enhanced for Loop در زبان جاوا
به طور کلی، میتوان گفت که حلقههای for
به اصطلاح Enhanced از نسخۀ 5.0 جاوا در این زبان معرفی شدهاند و هدف از طراحی آنها نیز سادهسازی در بهکارگیری و تعریف حلقهها بود به طوری که جهت استفاده از حلقههایی از این دست دیگر نیازی به تعریف پارامتر سوم (مقدار افزایشی) در هر بار تکرار حلقه نداریم.
برای روشنتر شدن کاربرد حلقههایی از این دست، سناریوی مطرحشده در مثال قبل را مجدداً مد نظر قرار داده و آن را با استفاده از این نوع حلقهها پیادهسازی مینماییم. برای این منظور، کلاس جدیدی تحت عنوان EnhancedForLoop
در پروژۀ فعلی خود میسازیم که در ابتدا کدی به صورت زیر خواهیم داشت:
public class EnhancedForLoop {
public static void main(String[] args) {
}
}
اکنون آرایۀ monthNames
که درآمد هر یک از ماههای سال را در آن ذخیره کردهایم مد نظر قرار داده و به صورت زیر با استفاده از این نوع حلقه آرایه را پیمایش کرده و هر یک از اِلِمانهای آن را با هم جمع میکنیم به طوری که خواهیم داشت:
public class EnhancedForLoop {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
int total = 0;
for(int counter : monthNames) {
total = total + counter;
}
}
}
همانطور که پیشتر اشاره کردیم، ساختار حلقههایی از این دست مشابه حلقههای for
معمولی میباشد با این تفاوت که به جای تعریف سه پارامتر داخل پرانتزهای مرتبط با کیورد for
تنها یک پارامتر را درج کرده و بعد از آن یک علامت :
قرار داده و در نهایت نام آرایهای را مینویسیم که قصد داریم تا در هر بار تکرار حلقه پیمایش شود.
بنابراین در مثال فوق ابتدا با استفاده از دیتا تایپ int
متغیری به نام total
با مقدار اولیۀ 0 تعریف میکنیم که این متغیر قرار است تا مقدار حاصل از جمع اِلِمانهای آرایۀ monthNames
را نگهداری کند و در ادامه حلقۀ for
را بدین صورت تعریف میکنیم که با استفاده از دیتا تایپ int
متغیری تحت عنوان counter
تعریف کرده سپس نام آرایۀ monthNames
را پس از علامت :
در مقابل آن مینویسیم و بدین ترتیب در هر بار تکرار حلقه هر یک از اِلِمانهای آرایه به ترتیب به متغیر counter
منتسب شده و دستورات داخلی حلقه اجرا میشوند که در آن گفتهایم در هر بار تکرار حلقه مقدار منتسب به متغیر counter
با مقدار قبلیِ منتسب به متغیر total
جمع شده و مقدار جدید مجدداً به متغیر total
اختصاص داده شود و در ادامه به منظور محاسبۀ میانگین درآمد ماهیانه به صورت زیر عمل میکنیم:
public class EnhancedForLoop {
public static void main(String[] args) {
int[] monthNames = new int[12];
monthNames[0] = 500000;
monthNames[1] = 1500000;
monthNames[2] = 1300000;
monthNames[3] = 1700000;
monthNames[4] = 2500000;
monthNames[5] = 500000;
monthNames[6] = 1500000;
monthNames[7] = 1000000;
monthNames[8] = 750000;
monthNames[9] = 500000;
monthNames[10] = 1400000;
monthNames[11] = 1100000;
int total = 0;
for(int counter : monthNames) {
total = total + counter;
}
int avarageIncome = total / 12;
System.out.println("Your avarage income is " + avarageIncome);
}
}
همانطور که در کد فوق ملاحظه میکنیم، مشابه مثال پیشین، با استفاده از دیتا تایپ int
متغیری به نام avarageIncome
تعریف کرده و مقدار منتسب به متغیر total
را بر عدد 12 تقسیم کرده و نتیجۀ حاصل از تقسیم را به متغیر avarageIncome
منتسب نمودهایم و در ادامه با استفاده از متد ()println
مقدار متغیر مذکور را به عنوان میانگین درآمد ماهیانه به همراه استرینگ «Your avarage income is» در کنسول چاپ میکنیم به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:
Your avarage income is 1187500
به طور کلی، در این آموزش به بررسی نحوۀ پیمایش اِلِمانهای آرایه با بهکارگیری حلقۀ for
و جمع کردن هر یک از اِلِمانها با یکدیگر پرداخته و در ادامه حلقههای به اصطلاح Enhanced را معرفی نمودیم به علاوه اینکه تفاوتهای این حلقهها با حلقههای for
عادی را تشریح نمودیم. در پایان، لازم به یادآوری است که برای پیادهسازی سناریوی مطرحشده در این آموزش روشهای بسیاری وجود دارد اما به دلیل درک نحوۀ جمع کردن اِلِمانهای آرایه راهکار ارائهشده در این آموزش به کار گرفته شد.