در این آموزش قصد داریم تا نحوۀ Sort یا «مرتب کردن» اِلِمانهای تشکیلدهندۀ یک آرایه را در زبان برنامهنویسی جاوا مورد بررسی قرار دهیم و برای این منظور نیاز است تا حتماً مباحث مربوط به آرایهها در آموزشهای پیشین را به خوبی درک کرده باشیم. حال جهت درک کاربرد مرتبسازی اِلِمانهای تشکیلدهندۀ یک آرایه، سناریویی از دنیای واقعی را بدین صورت در نظر میگیریم که قصد داریم تا اسامی مربوط به بازیگران فیلمی همچون «جدایی نادر از سیمین» را مرتب کرده سپس در اختیار تیم فیلمبرداری و مونتاژ قرار دهیم تا در تیتراژ پایانی نام بازیگران را بر اساس ترتیب اِعمالشده نمایش دهند.
برای این منظور، یک پروژۀ جدید تحت عنوان ANaderSiminSeperation تعریف میکنیم و همچنین کلاسی به نام AlphabeticOrder
در آن میسازیم. حال به منظور ذخیرهسازی دادههای مربوط به اسامی بازیگران نیاز به استفاده از کلاس String
داریم تا بتوانیم یک آرایه از جنس String
تعریف کنیم و از آنجایی که این فیلم شش بازیگر اصلی دارد، آرایهای به طول 6 تعريف میکنیم:
public class AlphabeticOrder {
public static void main(String[] args) {
String[] castNames = new String[6];
}
}
همانطور که در کد فوق ملاحظه میکنیم، ابتدا نوع دادۀ String
را ذکر کرده و در ادامه علائم []
را قرار دادهایم سپس نام آرایه را castNames
انتخاب کرده و در ادامه با بهکارگیری کیورد new
به کامپایلر دستور میدهیم تا آبجکتی جدید از جنس آرایه تحت عنوان castNames
بسازد و با قرار دادن عدد 6 مقابل نوع دادۀ Stirng
داخل علائم []
تعداد اِلِمانهای آرایه را مشخص میکنیم. اکنون آرایهای به طول 6 از جنس استرینگ داریم که در ادامه و در کد زیر اسامی تکتک بازیگران را بر اساس ترتیبی دلخواه وارد آن میکنیم:
public class AlphabeticOrder {
public static void main(String[] args) {
String[] castNames = new String[6];
castNames[0] = "Zareyee Merila";
castNames[1] = "Hosseini Shahab";
castNames[2] = "Bayat Sareh";
castNames[3] = "Moadi Peyman";
castNames[4] = "Hatami Leila";
castNames[5] = "Farhadi Sarina";
}
}
همانطور که در کد فوق ملاحظه میکنیم، اول نام خانوادگی بازیگران سپس نام آنها را در آرایۀ castNames
وارد کردهایم چرا که در این مثال میخواهیم تا اسامی بازیگران را بر اساس نام خانوادگی مرتب نماییم. در این مرحله نیاز به تعریف حلقهای از جنس for
داریم تا در هر بار تکرار آن بتوانیم اسامی بازیگران را بر اساس حروف الفبا یکی پس از دیگر نمایش دهیم و از همین روی یک حقله ایجاد کرده و پارامترهای آن را به صورت زیر تعریف میکنیم:
public class AlphabeticOrder {
public static void main(String[] args) {
String[] castNames = new String[6];
castNames[0] = "Zareyee Merila";
castNames[1] = "Hosseini Shahab";
castNames[2] = "Bayat Sareh";
castNames[3] = "Moadi Peyman";
castNames[4] = "Hatami Leila";
castNames[5] = "Farhadi Sarina";
for (int number = 0; number < castNames.length; number++) {
}
}
}
در کد فوق، نقطۀ شروع حلقه را عدد 0 قرار داده و نقطۀ پایان را با استفاده از اتریبیوت length
برابر با طول آرایۀ castNames
تعریف کردهایم و در پارامتر سوم نیز گفتهایم در هر بار تکرار حلقه یک واحد به عدد پیشین اضافه شده و در صورت برقرار بودن شرایط حلقه نیز دستورات داخلی آن اجرا شوند. حال میخواهیم تا خروجی برنامه را در پنچرۀ کنسول به نمایش درآوریم و از همین روی کد فوق را به شکل زیر تکمیل میکنیم:
public class AlphabeticOrder {
public static void main(String[] args) {
String[] castNames = new String[6];
castNames[0] = "Zareyee Merila";
castNames[1] = "Hosseini Shahab";
castNames[2] = "Bayat Sareh";
castNames[3] = "Moadi Peyman";
castNames[4] = "Hatami Leila";
castNames[5] = "Farhadi Sarina";
for (int number = 0; number < castNames.length; number++) {
System.out.println((number+1) + ": " + castNames[number]);
}
}
}
با اجرای برنامۀ فوق، هر یک از استرینگهای مرتبط به نام بازیگران به ترتیب به اندیسهای 0 تا 5 از آرایۀ castNames
اختصاص داده میشوند و با اجرای حلقۀ for
نیز مقدار اولیۀ 0 به متغیر number
اختصاص یافته و شرط حلقه چک میشود بدین صورت آیا مقدار منتسب به متغیر number
کمتر از طول آرایه است که شرط true
ارزیابی شده و از همین روی دستورات داخلی حلقه اجرا میشوند که در آن گفتهایم ابتدا محاسبات ریاضیاتی داخل پرانتز معادل افزایش یک واحدیِ مقدار متغیر number
برابر با عدد 0 انجام شده سپس این مقدار با کاراکتر «:» کانکت شده و در ادامه اِلِمان مربوط به اندیس 0 از آرایۀ castNames
با آنها کانکت شده و در کنسول چاپ شوند (افزایش یک واحدیِ مقدار متغیر number
بدین دلیل انجام میشود تا اسامی بازیگران با شروع از عدد 1 در کنسول چاپ شوند.)
در ادامه، حلقۀ for
تکرار شده و مقدار قبلیِ منتسب به متغیر number
معادل عدد 1 یک واحد افزایش پیدا کرده و عدد 2 بدان اختصاص داده میشود سپس مجدداً شرط حلقه چک میشود که این بار نیز شرط برقرار است چرا که عدد 2 از طول آرایه معادل عدد 6 کوچکتر است و از همین روی دستورات داخلی حلقه اجرا شده و نام بازیگر دوم مربوط به اندیس 1 با شمارۀ 2 کانکت شده و در کنسول چاپ میگردد و اين فرآيند تا رسيدن مقدار متغير number
به عدد 6 تكرار میشود که با اجرای برنامه در خروجی خواهیم داشت:
1: Zareyee Merila
2: Hosseini Shahab
3: Bayat Sareh
4: Moadi Peyman
5: Hatami Leila
6: Farhadi Sarina
همانطور که ملاحظه میکنیم، اسامی بازیگران به همان ترتیبی که نوشته شده بودند در بخش کنسول به نمایش درآمدهاند و شمارۀ ردیفها نیز از عدد 1 شروع میشود اما لیست فوق بر اساس حروف الفبا مرتب نشده است که برای این منظور نیاز به فراخوانی متد ()sort
از کلاس Arrays
داریم که میباید کد خود را به صورت زیر تکمیل کنیم:
import java.util.Arrays;
public class AlphabeticOrder {
public static void main(String[] args) {
String[] castNames = new String[6];
castNames[0] = "Zareyee Merila";
castNames[1] = "Hosseini Shahab";
castNames[2] = "Bayat Sareh";
castNames[3] = "Moadi Peyman";
castNames[4] = "Hatami Leila";
castNames[5] = "Farhadi Sarina";
Arrays.sort(castNames);
for (int number = 0; number < castNames.length; number++) {
System.out.println((number+1) + ": " + castNames[number]);
}
}
}
در کد فوق، پیش از شروع حلقۀ for
متد ()sort
از کلاس Arrays
را فراخوانی کردهایم که برای دسترسی به این کلاس نیز ابتدا باید آن را در برنامه ایمپورت کنیم. بنابراین مشابه آموزشهای پیشین و به منظور فراخوانی کلاسی از پیش تعریفشده در زبان برنامهنویسی جاوا، به سه روش میتوانیم عمل کنیم که عبارتند از ایمپورت کردن کلاس Arrays
به صورت دستی، قرار دادن نشانگر ماوس روی واژۀ Arrays
و انتخاب گزینۀ مرتبط با ایمپورت این کلاس و همچنین فشردن همزمان کلیدهای Ctrl + Shift + O که در نهایت انتخاب هر یک از سه روش مذکور منجر به اضافه شدن دستور سطر اول به ابتدای برنامه میشود (لازم به یادآوری است که بسته به تنظیمات ادیتور، ممکن است کلیدهای ترکیبی فوق متفاوت باشند.)
حال پس از دسترسی به کلاس Arrays
و فراخوانی متد ()sort
در ادامه آرایۀ castNames
را به عنوان آرگومان ورودی به متد مذکور میدهیم تا بدین ترتیب متد ()sort
روی اِلِمانهای این آرایه اِعمال شده و آنها را بر اساس حروف الفبای انگلیسی از A تا Z مرتب کرده و در نهایت اِلِمانهای مرتبشده را مجدداً به آرایۀ castNames
منتسب کند.
نکته |
در زبان برنامهنویسی جاوا عملکرد متد ()sort بدین شکل است که حروف الفبا را از A تا Z مرتب کرده و در مورد اعداد هم آنها را به صورت صعودی مرتب میکند. |
در ادامه، حلقۀ for
در کد فوق اجرا شده و هر یک از اِلِمانهای آرایه مذکور با شروع از عدد 1 و بر اساس ترتیب حروف الفبای انگلیسی در خروجی چاپ میشوند به طوری که با اجرای مجدد برنامه در خروجی خواهیم داشت:
1: Bayat Sareh
2: Farhadi Sarina
3: Hatami Leila
4: Hosseini Shahab
5: Moadi Peyman
6: Zareyee Merila
همانطور که ملاحظه میکنیم، نامهای خانوادگی بر اساس حروف الفبا مرتب شده و بر همین اساس نیز با شروع از عدد 1 تا 6 در کنسول چاپ شدهاند.