آموزش آرایه در جاوا

آرایه در جاوا برای ذخیره و نگه‌داری مجموعه‌ای از اطلاعات با نوع داده‌ای یکسان استفاده می‌شود. با استفاده از آرایه می‌توانیم به جای تعریف چندین متغیر و ذخیره مقادیر در آن‌ها، با تعریف یک متغیر، چندین مقدار از یک Data Type را نگهداری کنیم. در این مقاله با تعریف آرایه (Array) آشنا شده و نحوه استفاده و کاربردهای آن را خواهیم شناخت. سپس چند ترفند کاربردی برای کار با آرایه در جاوا را با هم مرور می‌کنیم.

 

آرایه در جاوا چیست ؟

آرایه (Array) یک ساختمان داده است که از چند عنصر با نوع داده‌ای خاص تشکیل شده است.

هر کدام از این عناصر در آرایه به کمک یک عدد شناسایی می‌شوند. این عدد در حقیقت مشخص کننده جایگاه آن عنصر در آرایه است.

به شماره خانه در آرایه در اصطلاح برنامه نویسی ایندکس (index) یا اَندیس گفته می‌شود.

شماره ایندکس از 0 شروع شده و تا اندازه آرایه یکی کمتر ادامه پیدا می‌کند.

مزیت استفاده از آرایه

  • یکی از مزایای اصلی استفاده از آرایه در جاوا، مرتب سازی برنامه و ساختارمند کردن متغیرهاست. به این صورت که مقادیر مرتبط با هم در یک آرایه و در کنار یکدیگر قرار می‌گیرند.
  • اگر بخواهیم چندین داده را در یک متغیر ذخیره کنیم؛ می‌بایست از شیوه‌های دسترسی به حافظه استفاده کنیم. اما در آرایه با استفاده از یک عدد (همان index) به داده‌های خود دسترسی خواهیم داشت.

عیب استفاده از آرایه

یکی از اصلی‌ترین معایب آرایه ثابت بودن اندازه آن است! به این معنی که در طول اجرای برنامه، اجازه افزایش ظرفیت یک آرایه را نخواهیم داشت.

البته این مشکل به کمک ساختمان داده‌های دیگر رفع شده؛ اما خود Array به تنهایی چنین امکانی را ندارد.

 

انواع آرایه

در کل دو نوع آرایه وجود دارد.

  1. آرایه خطی یا تک بعدی
  2. آرایه چند بعدی (مثل آرایه دو بعدی در جاوا)

اگر آرایه ما به صورت خطی تعریف شده باشد، یک آرایه تک بعدی داریم.

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

برای درک بهتر، ماتریس یک آرایه دو بعدی و مکعب یک آرایه چند بعدی است.

ساختار آرایه در برنامه نویسی

تصویر ساختار آرایه در برنامه نویسی

 

تعریف آرایه در جاوا

تعریف آرایه در زبان برنامه نویسی جاوا بسیار مشابه تعریف یک متغیر ساده است.

همان‌طور که می‌دانید برای تعریف یک متغیر در جاوا، ابتدا نوع داده‌ای (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]

 

کتابخانه java.util.Arrays متدهای بسیار زیادی دارد که می‌توانید تمام آن‌ها را در مستندات آن بررسی کنید.

 

تعریف آرایه به عنوان ورودی و خروجی متد

اگر بخواهیم متدهایی را برای کار با آرایه ها در جاوا تعریف کنیم، نیاز داریم ورودی یا خروجی متد به صورت آرایه باشد.

انجام این کار بسیار ساده است و در ادامه نحوه پیاده سازی را خواهیم دید.

تعریف آرایه به عنوان ورودی متد

فرض کنید می‌خواهیم متدی برای محاسبه میانگین مقادیر یک آرایه بنویسیم.

به این صورت که هر آرایه‌ای به متد ما داده شد، به عنوان خروجی، یک مقدار میانگین به صورت 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) پرداختیم. سپس نحوه تعریف آرایه در جاوا و کار با آرایه یک بعدی در جاوا را بررسی کردیم. ترفندهایی برای کارِ بهتر با آرایه در جاوا مرور شد. در نهایت هم مثالی از یک ماتریس به عنوان آرایه چند بعدی زدیم.

امیدوارم با این ساختمان داده پر استفاده در جاوا به خوبی آشنا شده باشید. اگر سؤالی دارید، خوشحال می‌شوم راهنمای شما باشم! بخش نظرات برای شماست…