در آموزش گذشته به بررسی نحوۀ مرتبسازی اِلِمانهای یک آرایه با فراخوانی متد ()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 عادی را تشریح نمودیم. در پایان، لازم به یادآوری است که برای پیادهسازی سناریوی مطرحشده در این آموزش روشهای بسیاری وجود دارد اما به دلیل درک نحوۀ جمع کردن اِلِمانهای آرایه راهکار ارائهشده در این آموزش به کار گرفته شد.
