![آموزش آرایه در جاوا](https://sabzdanesh.com/Uploads/2019/11/Java-Array-Tutorial-and-Tricks.jpg)
آرایه در جاوا برای ذخیره و نگهداری مجموعهای از اطلاعات با نوع دادهای یکسان استفاده میشود. با استفاده از آرایه میتوانیم به جای تعریف چندین متغیر و ذخیره مقادیر در آنها، با تعریف یک متغیر، چندین مقدار از یک Data Type را نگهداری کنیم. در این مقاله با تعریف آرایه (Array) آشنا شده و نحوه استفاده و کاربردهای آن را خواهیم شناخت. سپس چند ترفند کاربردی برای کار با آرایه در جاوا را با هم مرور میکنیم.
فهرست محتوای آموزش
آرایه در جاوا چیست ؟
آرایه (Array) یک ساختمان داده است که از چند عنصر با نوع دادهای خاص تشکیل شده است.
هر کدام از این عناصر در آرایه به کمک یک عدد شناسایی میشوند. این عدد در حقیقت مشخص کننده جایگاه آن عنصر در آرایه است.
به شماره خانه در آرایه در اصطلاح برنامه نویسی ایندکس (index) یا اَندیس گفته میشود.
شماره ایندکس از 0 شروع شده و تا اندازه آرایه یکی کمتر ادامه پیدا میکند.
مزیت استفاده از آرایه
- یکی از مزایای اصلی استفاده از آرایه در جاوا، مرتب سازی برنامه و ساختارمند کردن متغیرهاست. به این صورت که مقادیر مرتبط با هم در یک آرایه و در کنار یکدیگر قرار میگیرند.
- اگر بخواهیم چندین داده را در یک متغیر ذخیره کنیم؛ میبایست از شیوههای دسترسی به حافظه استفاده کنیم. اما در آرایه با استفاده از یک عدد (همان index) به دادههای خود دسترسی خواهیم داشت.
عیب استفاده از آرایه
یکی از اصلیترین معایب آرایه ثابت بودن اندازه آن است! به این معنی که در طول اجرای برنامه، اجازه افزایش ظرفیت یک آرایه را نخواهیم داشت.
انواع آرایه
در کل دو نوع آرایه وجود دارد.
- آرایه خطی یا تک بعدی
- آرایه چند بعدی (مثل آرایه دو بعدی در جاوا)
اگر آرایه ما به صورت خطی تعریف شده باشد، یک آرایه تک بعدی داریم.
اما گاهی ممکن است دو یا چند آرایه را به صورت تو در تو استفاده کنیم. در این صورت یک آرایه چند بعدی خواهیم داشت.
برای درک بهتر، ماتریس یک آرایه دو بعدی و مکعب یک آرایه چند بعدی است.
![ساختار آرایه در برنامه نویسی](https://sabzdanesh.com/Uploads/2019/11/Array-Structure-in-Programming.jpg)
تصویر ساختار آرایه در برنامه نویسی
تعریف آرایه در جاوا
تعریف آرایه در زبان برنامه نویسی جاوا بسیار مشابه تعریف یک متغیر ساده است.
همانطور که میدانید برای تعریف یک متغیر در جاوا، ابتدا نوع دادهای (Data Type) متغیر و سپس نام متغیر را مشخص میکنیم.
در صورتی که بخواهیم عملیات مقداردهی اولیه نیز انجام شود، با قرار دادن علامت انتساب (=
) مقدار اولیه آن را مشخص خواهیم کرد.
برای تعریف آرایه نیز ابتدا باید Data Type مقادیر داخل آن را مشخص کنیم. سپس یک علامت []
بعد از نوع دادهای قرار داده و اسم متغیر آرایه را مشخص میکنیم.
پس از قرار دادن علامت انتساب، با نوشتن کلمه کلیدی new
اقدام به تعریف نوع دادهای در خانههای آرایه میکنیم. سپس Data Type مورد نظر را دوباره نوشته و تعداد خانههای آرایه (ظرفیت) را با عدد درون []
مشخص خواهیم کرد.
به کمک قطعه کد زیر، یک آرایه شش تایی از اعداد صحیح (integer) ساختهایم.
int[] myArray = new int[6];
مقداردهی اولیه آرایه
گاهی نیاز داریم در هنگام تعریف آرایه در جاوا، به تمام ایندکسهای آن مقادیر مرتبطشان را انتساب دهیم.
برای این کار بعد از علامت انتساب، میتوان مقادیر مورد نظر را درون {}
وارد کرد. هر مقدار با , از یکدیگر جدا میشوند.
int[] myArray = { 3, 7, 6, 4, 2, 9 }
دسترسی به خانههای آرایه
با مشخص کردن شماره خانه در آرایه، میتوانیم مقدار ذخیره شده در آن را خوانده یا تغییر دهیم.
برای مشخص کردن ایندکس آرایه، پس از آوردن نام آرایه، ایندکس را در []
قرار میدهیم.
int[] myArray = { 3, 7, 6, 4, 2, 9 } // myArray[0] --> 3 // myArray[4] --> 2 // myArray[6] --> XXX (Invalid Index)
توجه کنید که اگر خانهای خارج از محدوده اندازه آرایه فراخوانی شود، با خطای IndexOutOfBound مواجه خواهید شد!
مقداردهی عناصر آرایه
تغییر مقادیر یک آرایه با استفاده از علامت انتساب (=
) به راحتی قابل انجام است.
ابتدا اندیس آرایه را مشخص کرده و سپس آن را مقداردهی میکنیم.
در قطعه کد زیر، مقدار موجود در خانه چهارم (ایندکس 3) را به 0 تغییر دادهایم.
myArray[3] = 0;
استفاده از آرایه جاوا در حلقه
همانطور که در قسمت قبل یاد گرفتیم، با مقدار دهی ایندکس، میتوان به تمام خانههای آرایه دسترسی داشت.
بنابراین اگر در یک حلقه، مقدار ایندکس را تغییر دهیم، میتوانیم روی تمام مقادیر آرایه عملیاتی را انجام دهیم.
استفاده از آرایه در حلقه for
در قطعه کد زیر با استفاده از یک حلقه for
، به تمام مقادیر موجود در آرایه دسترسی پیدا کرده و آنها را در کنسول چاپ میکنیم.
public class TestArrayClass { public static void main(String[] args) { int[] myArray = { 5, 3, 7, 4 }; for ( int i = 0; i < 4; i++ ) { System.out.print( myArray[i] + " "); } } } // output: 5 3 7 4
آرایه در حلقه while
مشابه مورد قبلی، اگر یک متغیر برای شمارش ایندکس در حلقه while
خود در نظر بگیریم، میتوان به راحتی در آرایه حرکت کرد.
حلقه foreach برای پیمایش آرایه
در JDK 1.5
و بعد از آن یک حلقه جدید مشابه for
معرفی شد به نام foreach
. حلقه foreach
به ما اجازه پیمایش یک آرایه را بدون استفاده از متغیری به عنوان ایندکس میدهد.
استفاده از این نوع حلقه بسیار ساده و راحت است.
فرض کنید مشابه قبل، میخواهیم تمام مقادیر یک آرایه را در خروجی چاپ کنیم.
for (int itm: myArray) { System.out.print(itm + " "); }
نحوه کار این حلقه به این صورت است که از ابتدا تا انتهای آرایه، در هر دُور از حلقه، یک مقدار را درون متغیر itm
قرار داده و حلقه را اجرا میکند.
ترفندهای آرایه در جاوا
آرایه در java ویژگیها و متدهایی دارد که به کمک آنها میتوان اطلاعاتی در مورد آرایه به دست آورد.
در ادامه چند نمونهی پر کاربرد آنها را معرفی میکنیم.
اندازه آرایه
با صدا زدن ویژگی length
روی آرایه، یک مقدار عددی که اندازه آرایه است را خواهیم داشت.
public class TestArrayClass { public static void main(String[] args) { int[] myArray = { 5, 3, 7, 4 }; System.out.print( "Array Size: " + myArray.length ); } } // output: // Array Size: 4
دو مورد بعدی با افزودن کتابخانه java.util.Arrays
به برنامه قابل اجرا خواهند بود.
پس ابتدا این کتابخانه را به ابتدای برنامه خود اضافه میکنیم.
import java.util.Arrays;
چاپ آرایه در جاوا
گاهی برای دیباگ برنامه، لازم است مقادیر موجود در یک آرایه را در کنسول چاپ کنیم.
اگر آرایه را به عنوان ورودی متد System.out.print()
بدهیم، صرفاً آدرس (رفرنس) ذخیرهسازی شئ آن را خواهیم داشت!
int[] myArray = { 5, 3, 7, 4 }; System.out.print( myArray ); // output: // [I@6d06d69c
تابعی در کلاس Arrays وجود دارد که یک آرایه را برای چاپ مقادیرش آمادهسازی میکند. خروجی این تابع یک رشته String است.
ورودی متد Arrays.toString()
یک آرایه است.
int[] myArray = { 5, 3, 7, 4 }; System.out.print( Arrays.toString(myArray) ); // output: // [5, 3, 7, 4]
مرتب کردن آرایه در java
بارها شده که بخواهیم مقادیر یک آرایه را به صورت صعودی مرتب کنیم.
برای این کار یک متد در کتابخانه Arrays
به نام sort()
وجود دارد. این تابع یک آرایه به عنوان ورودی از ما گرفته و مقادیر آن را به صورت صعودی مرتب میکند.
توجه داشته باشید که تغییرات بر روی آرایه اصلی اعمال شده و آرایه نامرتب را از دست خواهیم داد.
int[] myArray = { 5, 3, 7, 4 }; Arrays.sort(myArray); // myArray = [3, 4, 5, 7]
تعریف آرایه به عنوان ورودی و خروجی متد
اگر بخواهیم متدهایی را برای کار با آرایه ها در جاوا تعریف کنیم، نیاز داریم ورودی یا خروجی متد به صورت آرایه باشد.
انجام این کار بسیار ساده است و در ادامه نحوه پیاده سازی را خواهیم دید.
تعریف آرایه به عنوان ورودی متد
فرض کنید میخواهیم متدی برای محاسبه میانگین مقادیر یک آرایه بنویسیم.
به این صورت که هر آرایهای به متد ما داده شد، به عنوان خروجی، یک مقدار میانگین به صورت double
به ما بدهد.
تعریف چنین متدی به صورت زیر خواهد بود.
public double average(int[] numbers){ int total = 0; for (int i = 0; i < numbers.length; i++) { total += numbers[i]; } return total/numbers.length; }
تعریف خروجی متد به صورت آرایه
حال فرض کنید متد سادهای داریم که مقادیر موجود در هر خانه از آرایه را به توان 2 میرساند. در انتها همان آرایه را به عنوان خروجی به ما خواهد داد.
public int[] power2(int[] numbers){ for (int i = 0; i < numbers.length; i++) { numbers[i] = numbers[i] * numbers[i]; } return numbers; }
آرایه دو بعدی در جاوا
تعریف آرایههای چند بعدی تقریباً شبیه هم هستند. ما در اینجا یک آرایه دو بعدی (ماتریس) ایجاد کرده و نحوه کار با آن را بررسی میکنیم.
برای تعریف آرایه دو بعدی، هر عنصرِ آرایه میبایست دو اندیسِ جداگانه بگیرد.
اگر آرایه دو بعدی را شبیه یک ماتریس (جدولِ تخت) در نظر بگیریم، اندیس اول مشخص کننده سطر و اندیس دوم برای ستون خواهد بود. (همان x
و y
)
در زیر یک ماتریس 3 در 3 با استفاده از آرایه دو بعدی در جاوا ایجاد کردهایم.
int[][] testMatrix = new int[3][3];
مقداردهی ماتریس در جاوا
واضح است که برای دسترسی به عناصر یک ماتریس و یا تغییر مقادیر آنها باید هر دو اندیس را مشخص کنیم.
برای مثال، با قطعه کد زیر، تمام مقادیر موجود در سطر اول را مقداردهی میکنیم.
myMatrix[1][0] = 14; myMatrix[1][1] = 15; myMatrix[1][2] = 16;
چاپ ماتریس دو بعدی
به عنوان یک تمرین ساده برای کار با آرایه دو بعدی در جاوا، فرض کنید یک ماتریس با طول و عرض نامشخص در اختیار داریم.
با استفاده از قطعه کد زیر، مقادیر آن را به صورت ماتریسی در کنسول چاپ میکنیم.
public void printMatrix(int[][] mtx){ for(int i=0; i< mtx.length; i++){ for(int j=0; j< mtx[0].length; j++){ System.out.print(mtx[i][j]+" "); } System.out.println(); } }
گرفتن آرایه از کاربر در جاوا
کاربران متعددی درباره گرفتن آرایه از کاربر در جاوا سوال کرده بودند که تصمیم گرفتم در بهروزرسانی مقاله، به آن بپردازم.
در مقالهای مفصل درباره گرفتن ورودی از کاربر در جاوا صحبت کردهام. در این جا با استفاده از پکیج Scanner
اقدام به دریافت ورودی از کاربر میکنیم.
برنامه گرفتن آرایه از کاربر در جاوا در دو مرحله اصلی انجام میشود:
- پرسیدن تعداد اعضای آرایه مورد نظر از کاربر
- گرفتن ورودیهای آرایه از کاربر
همانطور که در قسمت تعریف آرایه گفتم، آرایه در جاوا اندازهای مشخص دارد و نمیتوان آن را کم یا زیاد کرد. به همین دلیل گام اول را برای مشخص کردن تعداد عناصر آرایه برمیداریم.
ابتدا پکیج Scanner
را به کلاس خود اضافه میکنیم.
import java.util.Scanner;
سپس در متد مورد نظرمان، از آن یک شئ ساخته و اندازه آرایه را از کاربر میگیریم.
Scanner s = new Scanner(System.in); System.out.print("Enter no. of elements you want in array:"); int n = s.nextInt();
حال میبایست آرایه را ایجاد کرده و با استفاده از یک حلقه for اقدام به گرفتن تک تک عناصر آرایه کنیم. (خطوط . تا . کد زیر)
کد زیر، متد نهایی دریافت آرایه از کاربر در جاوا خواهد بود.
import java.util.Scanner; public class getArrayInput { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("Enter no. of elements you want in array:"); int n = s.nextInt(); int myArr[] = new int[n]; System.out.println("Enter all the elements:"); for(int i = 0; i < n; i++) { myArr[i] = s.nextInt(); } } }
اگر میخواهید ترفندهای ورودی گرفتن از کاربر در جاوا را بخوانید، به مقاله زیر مراجعه کنید.
جمعبندی: آموزش آرایه در جاوا
در این مقاله ابتدا به معرفی آرایه (Array) در زبان برنامه نویسی جاوا (java) پرداختیم. سپس نحوه تعریف آرایه در جاوا و کار با آرایه یک بعدی در جاوا را بررسی کردیم. ترفندهایی برای کارِ بهتر با آرایه در جاوا مرور شد. در نهایت هم مثالی از یک ماتریس به عنوان آرایه چند بعدی زدیم.
امیدوارم با این ساختمان داده پر استفاده در جاوا به خوبی آشنا شده باشید. اگر سؤالی دارید، خوشحال میشوم راهنمای شما باشم! بخش نظرات برای شماست…
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
عالی خیلی بدردم خورد
خوشحالیم که این آموزش براتون مفید بوده
چگونه برلی ارایه های دو بعدی ورودی بگیریم از کاربر؟
یه راه حل ساده استفاده از دو حلقه تودرتو (به تعداد سطرها و ستونهای ماتریس) برای گرفتن مقادیره. برای گرفتن ورودی هم میتونید از کلاس Scanner کمک بگیرید.
سلام. اندیسهای آرایه در جاوا از صفر شروع می شود. چگونه میتونیم اندیس شروع آرایه را از صفر به یک تغییر داد. مثلا در ویژوال بیسیک با دستور Base option در قسمت جنرال برنامه اینکار انجام میشود.
سلام
تا جایی که اطلاع دارم آرایه جاوا همیشه از 0 شروع میشه و امکان تغییرش نیست. مگر اینکه مثلاً خودتون یک ساختمان داده جدید ایجاد کنید با این ویژگی خاص.
از تمام زحماتی که می کشید تشکر میکنم
سلامت باشی وحید عزیز
سلام
ببخشید میشه یه if نوشت که اگر تعداد داده مون از طول آرایه بیشتر شد یکی به index اضافه بشه؟
مثلا طول آرایه مون x است ، از طرف میپرسیم چنتا خونه لازم داری، بگه n تا ، یه شرط بذاریم :
if(n>x){
inxdex = n-1;
}
مثلا
سلام
تونستن که بله میتونید. معمولاً وقتی میخوایم اندازه یه array رو افزایش بدیم، یه آرایه جدید ایجاد میکنیم، دادهها رو از قبلی به جدید منتقل کرده و بعدش ازش استفاده میکنیم.
سلام
من یک برنامه نوشتم که چند تا کلاس داره،الان می خوام تو برنامه اصلی یک آرایه از کلاس اصلی ک توسط کلاس های دیگه ارث بری شده است بسازم اما نمیدونم چه جوری میشه ممنون میشم راهنمایی کنید🙏🏻🙏🏻
سلام
برای ساخت آرایه ای از اشیاء در جاوا میتونید به صورت زیر عمل کنید:
این فقط یک نگهدارنده ایجاد میکنه و بعدش باید دونه دونه اعضا رو با
new ClassName()
کردن تعریف کنید.سلام
چطور می توان یک آرایه را از متد داخل کلاس به کلاس اصلی main بازگشتreturn داد؟
سلام
اگر نوع خروجی متد رو شبیه به تعریف آرایه بذارید میتونید آرایه برگردونید.
مثلاً به جای void از
int[]
استفاده کنید.سلام
اگه تعداد اعضای لیست مشخص نباشه در ابتدا باید چیکار کنیم برای ورودی گرفتن از کاربر؟؟
سلام
برای ساخت آرایه در جاوا حتما باید تعداد اعضای اون مشخص باشه.
یک روش متداول وجود داره: ابتدا یه آرایه با اندازه پیشفرض ایجاد کنید. در هر بار گرفتن ورودی، بررسی کنید که آرایه تکمیل نشده باشه. اگر آرایه پر شد، یک آرایه بزرگتر (مثلا ۲ برابر قبلی یا ۱۰ تا خونه بیشتر) بسازید و مقادیر قبلی رو به آرایه جدید منتقل کنید.
برای کپی کردن اعضای آرایه قبلی هم میتونید از دستور
System.arraycopy()
کمک بگیرید.البته میشه با کتابخونههای مختلف، از ساختمان دادههایی که چنین کاری رو در پسزمینه انجام میدن و به شما یک ساختمان داده شبیه آرایه بدون محدودیت میدن هم استفاده کنید.
سلام خسته نباشید. میتونم آیدی شما رو داشته باشم و چنتا سوال کوتاه در موارد مختلف بپرسم؟
سلام
اخیراً در سوشال مدیا فعالیت زیادی ندارم. اگر سؤالی دارید در دیدگاههای آموزشها بپرسید معمولاً سریعتر پاسخ میگیرید.
ممنون از شما عالی بود
خوشحالم که براتون مفید بوده و برای یادگیری خودتون وقت میذارید.
سلام خیلی ممنون از مطلب مفیدی که در اختیار ما قرار دادید.میخواستم بدونم در آرایه با آی دی بخوام خونه ای رو پیدا کنم وحذفش کنم چطور باید این کار رو انجام بدم؟
سلام
منظورتون از
id
همون ایندکس عناصر آرایه هست؛ درسته؟به طور معمول امکان حذف عناصر در آرایه جاوا وجود نداره!
اما میتونید یک تابع برای این کار بنویسید. به این صورت که در یک حلقه، تمام عناصر به جز ایندکس مورد نظر رو به یک آرایه جدید منتقل کنید.
موفق باشید.
نه منظورم اینه که من آرایه ای درست کردم که آی دی و نام دانش آموزان درش ذخیره میشه میخوام بدونم چطور میتونم وقتی آی دی دانش آموز رو وارد میکنم اون رو از آرایه من حذف کنه
اگر کل اطلاعاتتون رو به صورت یک ماتریس در نظر گرفتید؛ یعنی آرایه دانشآموزان خودش متشکل از آرایههایی باشه که شامل یک عدد و نام فرد هست، مجدداً میتونید از همون روشی که گفتم استفاده کنید، با این تفاوت که جستجو رو به صورت تو در تو باید انجام بدید. یعنی در هر ایندکس از آرایه اصلی، ایندکس مربوط به
id
در آرایه دوم رو بررسی کنید، اگر مطابقت داشت، کل آرایه رو از داخل آرایه اصلی حذف کنید.خوب و مفید بود ممنون از زحمات شما
و در عین حال خیلی مختصر بود .
خوشحالیم که مفید بوده و مورد استفادتون قرار گرفته
موفق باشید.
خوب
خوشحالیم که مفید بوده واستون
سلام بابت مقاله خوبتون مرسی
فقط یه سوال اگه ما یک ارایه ای از جنس رشته ای داشته باشیم وبخواهیم بگیم توی contains هرچی که شبیه این ورودی contains هست بیار چی کار کنیم مثلا در ارایه من علی ، رضا ، محمد،لیلا هست من تو contains میخوام بگم هرچی که با ل داره بیاره میشه راهنمایی کنید
سلام
خوشحالم که مقاله مورد استفادتون بوده
راستش در مورد این موردی که گفتید اطلاعی ندارم و جستجویی که کردم ظاهراً یه تابع خاص براش نیست و باید ترکیبی از توابع استفاده کنید…
یه روش ساده هم استفاده از یک حلقه هست.
که شما در اون تک تک عناصر آرایه رو بررسی میکنید.
نوع داده رشته (String) هم متد
contains()
داره که در صورتی که کاراکتر یا رشته مورد نظر داخل رشته باشه بهمونtrue
میدهاینطور میتونید تک تک عناصر رو توی یه حلقه ساده بررسی کنید.
موفق باشید
سلام خسته نباشید ممنون از مطالب خوبتون میخواستم ببینم چجوری میتونیم نقاط مشترک چند تا ارایه رو تشخیص بدیم توی دستور set بلدم منتها اونجا بلد نیستم که ورودی از کاربر بگیرم اگر لطف کنید این سوال هم جواب بدید در Set چجوری میشه از کاربر ورودی گرفت و توی متغیر ذخیره کرد ممنون
سلام
خوشحالم که مقاله مورد استفادتون قرار گرفته…
اینطور که فهمیدم شما میخواید یه ورودی از کاربر بگیرین و به یک Set اضافه کنید؛ اگر بله،
Set
یک اینترفیس هست که ازCollection
ارث بری کرده و اجازه وجود دو مقدار یکسان رو در خودش نمیدهیک متد به نام
add()
هم داره که مقداری رو میگیره و داخل Set اضافه میکنهمیتونید با روشهای رایج (نظیر scanner در آموزش گرفتن ورودی از کاربر) ورودی رو از کاربر بگیرید و با استفاده از متد
add()
به ستِ دلخواهتون اضافش کنید.موفق باشید.