نحوه ی تجمیع کردن چندین آرایه با یکدیگر در زبان جاوا


گاهی اوقات در کدنویسی یک برنامه نیاز است تا عناصر تشکیل دهنده یک آرایه را با یکدیگر جمع کنیم که در این آموزش یاد خواهیم گرفت چگونه این کار را انجام دهیم. برای درک این مسئله یک سناریوی جدید تعریف می کنیم.

فرض کنیم که می خواهیم برنامه ای بنویسیم که در آن بتوانیم میانگین درآمد ماهیانه سال گذشته خود را مشخص کنیم (البته برای نوشتن چنین برنامه ای راه های بسیاری وجود دارد که حتی ممکن است به مراتب از استفاده از آرایه ها نیز راحت تر باشد. اما در این آموزش صرفاً هدف درک نحوه کارکرد آرایه ها می باشد.) برای این منظور ابتدا پروژه ای تحت عنوان 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;
    }
}

در کد فوق تعریف کرده ایم که در آرایه ی ما دوازده عنصر جای گیرد. سپس برای هر یک از ماه ها یک درآمد ماهیانه در نظر گرفته ایم (اگر توجه کرده باشیم می بینیم که اولین ماه که فروردین باشد جایگاه صفر را به خود اختصاص داده است چرا که خانه های آرایه ها از صفر شروع می شوند.)

حال یک متغیر از جنس int ایجاد می کنیم و نام آن را total به معنی "جمع کل" می گذاریم. مقدار در نظر گرفته شده برای این متغیر صفر خواهد بود. سپس یک حلقه ای از جنس for ایجاد می کنیم چرا که می خواهیم از طریق لوپ شدن، در هر دوازده ماه سال گردش کرده تا مقدار آن ها را گرفته سپس میانگین آن ها را محاسبه کنیم.

یک متغیر از جنس int داخل for ایجاد کرده و نام آن را counter به معنی "شمارنده" می گذاریم و مقدار اولیه آن را صفر می گذاریم چرا که اولین گزینه در آرایه ای که در بالا ایجاد شده است از صفر شروع می شود. به عبارت دیگر ;int counter = 0 به منزله نقطه آغازین می باشد. سپس نقطه پایانی را کوچکتر از عدد 12 می گذاریم. از آن جا که ما 12 ماه در سال داریم پس می خواهیم که این حلقه دوازده بار گردش کند و در نهایت به for دستور می دهیم که در هر بار لوپ شدن یک واحد به متغیر 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 اختصاص دهد. برای این منظور نام متغیر total را نوشته و یک علامت مساوی مقابل آن قرار می دهیم. در واقع با این کار می خواهیم مقدار جدید را به این متغیر اختصاص دهیم. حال این مقدار جدید monthNames خواهد بود که مقابل آن یک جفت علامت [ ] نیز قرار گرفته است. در واقع عددی که داخل علامت [ ] قرار می گیرد حاکی از ماهی است که قرار است مقدار اختصاص داده شده به آن به متغیر total اختصاص یابد. برای این که این کار به صورت خودکار صورت گیرد داخل علامت [ ] به جای این که یک عدد از صفر تا یازده بنویسیم که کل ماه ها را شامل شود، نام متغیری که در for ایجاد کردیم را خواهیم نوشت چرا این متغیر نیز از صفر شروع شده و دوازده بار نیز تکرار خواهد شد. کد ما به شکل زیر تکمیل خواهد شد:

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];
        }
    }
}

نکته ای که در اینجا می بایست مد نظر قرار داده شود این است که عبارت ;[total = monthNames[counter حاکی از آن است که کامپایلر می بایست مقدار اختصاص داده شده به متغیر total را معادل با مقدار آرایه قرار دهد. اما چیزی که ما از برنامه خود می خواهیم این است که این مقادیر با یکدیگر جمع شوند. از این رو یک علامت + قبل از علامت مساوی قرار می دهیم. در واقع با این کار در هر بار لوپ شدن، مقدار اختصاص داده شده به همه عناصر موجود در آرایه به متغیر 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);
    }
}

با استفاده از دستور ;()System.out.println و قرار دادن نام متغیر total در آن، جمع کل درآمد یک سال ما به نمایش در خواهد آمده و خروجی برنامه به شکل زیر خواهد بود:

حال نیاز داریم تا این عدد را بر عدد 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 تقسیم بر تعداد ماه های یک سال قرار داده ایم. سپس در دستور ;()System.out.println عبارت Your average income is به معنای "میانگین درآمد ماهیانه ی شما معادل است با" را نوشته و پس از قرار دادن یک علامت + نام متغیری که میانگین درآمد ماهیانه در آن ذخیره شده است را می نویسیم. پس از اجرای برنامه خروجی زیر مشاهده خواهد شد:

اکنون که با مفهوم آرایه ها در زبان برنامه نویسی جاوا آشنا شده ایم به راحتی می توانیم شکل جدیدی از حلقه های for تحت عنوان Enhanced for Loop را مورد بررسی قرار دهیم (ترجیح این است که کمتر دست به ترجمه اصطلاحات تخصصی برنامه نویسی بزنیم اما برای روشن تر شدن تفاوت مابین for Loop و Enhanced for Loop می توان مورد دوم را به "یک حلقه ی پیشرفته از جنس for " ترجمه کرد.)

به طور کلی می توان گفت که Enhanced for Loop در جاوای نسخه 5.0 معرفی شد و هدف از طراحی آن ساده سازی به کارگیری for بود. از سوی دیگر با توجه به مثال به کار گرفته شده در این آموزش، اگر ما از Enhanced for Loop استفاده می کردیم دیگر نیازی به به کار گیری از سومین پارامتر داخل for که همان مقدار افزایشی در هر بار لوپ شدن است نخواهد بود. برای روشن تر شدن این مطلب کلاس جدیدی تحت عنوان EnhacedForLoop در پروژه فعلی خود می سازیم:

public class EnhancedForLoop {
    public static void main(String[] args) {
    }
}

اکنون نیاز است تا یک آرایه در کلاس خود ایجاد کنیم، برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

public class EnhancedForLoop {
    public static void main(String[] args) {
        int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    }
}

همان طور که ملاحظه می شود یک آرایه از جنس عدد صحیح یا int تحت عنوان numbers به معنی "اعداد" ساخته و محتویات آن را اعداد 1 الی 10 قرار داده ایم. حال قصد داریم تا با استفاده از یک Enhanced for Loop مقادیر این آرایه را یکی پس از دیگری نشان دهیم. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:

public class EnhancedForLoop {
    public static void main(String[] args) {
        int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        for (int total : numbers) {
            System.out.println(total);
        }
    }
}

به طور خلاصه می توان گفت که ساختار یک Enhanced for Loop همانند یک for عادی است با این تفاوت که به جای آن که سه پارامتر را داخل پرانتزهای مرتبط for بنویسیم به یک پارامتر اکتفا کرده سپس بعد از آن یک علامت : قرار داده و در نهایت نام آرایه ای که می خواهیم لوپ شود را می نویسیم. در مثال فوق پارامتر در نظر گرفته شده برای for ما یک متغیر از جنس int تحت عنوان total به معنی "جمع کل" است که مقدار آن برابر با نام آرایه ای است تحت عنوان numbers که پیش از این ایجاد کردیم. حال برنامه را اجرا می کنیم:

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

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
a.huss.dar
a.huss.dar
سلام می خواستم ببینم چطورمی تونم با آرایه ها یک ماشین حساب با چهار عملگر اصلی بنویسم
ممنون بابت مقالات و تدریس بسیار خوبتون
shirin hosseini
shirin hosseini
سلام
آیا میشه در خط 16 متغیر int total رو بدون اینکه مساوی با صفر قرار بدیم بنویسیم یا حتما باید براش مقدار تعیین کنیم؟
لطفا اگه کسی میتونه کمک کنه و جواب بده.
ممنون
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
در تکمیل آموزش بی نقص سکان استاد بهزاد مرادی : چیزیکه تا به اینجای کار در رابطه با آرایه ها دانستیم ( که این قسمت آخرش هست ) به اون "آرایه های استاتیک" گفته میشه.
در "آرایه های استاتیک" که تا بحال اون رو مرور کردید ، با تعریف اون از ابتدا به حافظه ( حافظه ی موقت یا همون رم ) این رو میگیم که مثلا در حافظه ی خودت 3 بایت رو به من اختصاص بده و با تعیینش دیگه اگه در ادامه نیاز به بایتهای بیشتری داشته باشی نمیتونی ازش استفاده کنی .
( لازم به ذکر هست که : هر بایت ، 8 بیت از فضای 0-1 رو در حافظه اشغال میکنه . یعنی وقتی ما تعیین میکنیم که 3 بایت رو برامون در نظر بگیره یعنی در واقع داریم3 خونه ی 8 بیتی ، که سر جمع 24 خونه ی صفر یک هست رو برای خودمون رزرو میکنیم(24 بیت ) ) .
باید بدونیم که در این نوع از آرایه ها از ابتدا ماتعیین میکنیم که نیاز به ند باید ، یا اینتیجر یا دابل یا ... داریم و بیش از اون نمیتونیم ازش استفاده کنیم مگر اینکه برگردیم و دوباره اون رو در ابتدای کار تغییر بدیم . اما آرایه ی دیگری هم وجود داره که در این سری از "آموزشهای آرایه ها" اون رو مشاهده نکردم و میبایست به نحوی گنجونده بشه یا حداقل تعریفاتی از اون در اینجا بیاد و ذکر بشه ، و اون "آرایه ی داینامیک" هست.
در آرایه ی داینامیک ، ما بعد از تعریف کردن آرایه مون به هر مقدار که بخواهیم میتونیم در ادامه ی پروژه از اون استفاده بکنیم.
تعریف کردن یک آرایه استاتیک کمی در ساختار متفاوت هست با تعریف کردن یک آرایه ی استاتیک ( به دلیل و جود کاراکتری که موجب خواهد شد ادامه متن پاسخم کات بشه نمیتونم اون رو توضیح بدم ، با سرچی ساده میتونید به نتایج خوبی برسید .
اما همینقدر رو بدونید که بعد از تعریف یک آرای استاتیک مثلا از نوع اینتیجر ، دیگه ما به هر میزانی که بخواهیم میتنیم از اون در ادامه ی پروژه مون استفاده بکنیم ، زیرا که بر خلاف آرایه ی استاتیک که در اول آن تعیین میکنیم مثلا یک اینتیجر رو به اندازه 3 تا میخواهیم ، یعنی تنها امکان سه بار استفاده کردن رو بهمون میده ، اما در داینامیک ابتدا آن را محدود نمیکنیم .
امیدوارم مفید واقع بشه .
کاربر میهمان
کاربر میهمان
سلام،خسته نباشید فراوااااان
در مورد enhanced for من کامل متوجه نشدم،در توصیحش اوردید که total به معنای جمع کل اورده شده (یعنی مثل مثال اولتون) ولی نتیجه ای که به نمایش در اومده فقط نمایش عناصر ارایه است؟یکم توصیح بیشتر در مورد enhanced for بدید ممنون میشم
کاربر میهمان
کاربر میهمان
سلام یکی سوالی که از شما داشتم اینه که تفاوت
{int[ ] number{1,2,,3,4,5,6,7,8,9,10
با
;{int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10
در چی می باشد
حسین
حسین
ممنون. خسته نباشید.
امیرحسین مختاری
امیرحسین مختاری
سایتی که به زبان فارسی باشه برای تمرین برنامه نویسی هست؟
اگه هست لطفا بگید
ccc ccc
ccc ccc
سلام. لطف کنید نظر قبلی و نگاه کنید، سایتی معرفی شده. البته فارسی نیست.

در پاسخ به

امیرحسین مختاری
امیرحسین مختاری
بله دیده بودم فارسیش رو میخواستم
ممنون

در پاسخ به

میثم کریمی قادی
میثم کریمی قادی
سلام و خسته نباشید می خواستم خواهش کنم تا این درس همه مطالب که خونده شد چندتا مساله بدید که با توجه به دانشمون تا این درس برنامه شو بنویسیم تا با تمرین بیشتر متوجه کارکردهای همه کلاس ها و درس ها بشیم هرچی بیشتر باشه بهتر اگر هم سرتون شلوغه نمی تونید اینکار کنید یه مرجع بدید که بریم دنبالش مهم اینه که فقط مساله هاش تا این قسمت باشه برای کسانی که تا اینجا خوندن بازهم ممنون
ادمین سایت
ادمین سایت
سلام
لطفا به سایت زیر مراجعه نمایید
http://codingbat.com/java

در پاسخ به

C3css.com محمد قنبری
C3css.com محمد قنبری
سلام و عرض ادب و تشکر میکنم بابت لطفی که دریغ نمیکنید.
سوال :
۱- بنظر بنده در این فصل شما چند آرایه رو با هم تجمیع نکردید بلکه تمام عناصر یک آرایه رو با هم جمع کردید البته اگر حرفم اشتباه است بنده رو آگاه کنید.
۲- آیا Enhanced for Loop همان foreach در زبان های دیگر هست یا نه ُ foreach جدا میباشد و در ادامه گفته خواهد شد؟؟
زکات علم نشر آن است اما اهداف شما فراتر از زکات آن است.
با تشکر از شما
ادمین سایت
ادمین سایت
در ارتباط با مورد اول حق با شماست.
در مورد foreach هم مثلا در زبان هایی مثل پی اچ پی، می توان یک آرایه را به چندین متغیر تبدیل کرده و آن ها را مورد استفاده قرار داد

در پاسخ به

A.Double R.G
A.Double R.G
با سلام از آموزش های خودتان متشکرم
امکان داره که پس از اتمام تدریس کل مطالب رو به صورت پی دی اف بگذارید دانلود کنیم؟؟؟؟؟