recent
أخبار ساخنة

المصفوفات ذات بعدين Array2D في لغة جافا JAVA الدرس |15|

الصفحة الرئيسية

 

المصفوفات ذات بعدين Array2D

هي عبارة عن مجموعة من الصفوف و الأعمدة المتقاطعة مشكّلة بتقاطعها بما يسمى بالخلايا, هذا الدرس مهم جداً لأي مبتدأ, و تكون كما بالشكل الآتي يوضح شكل المصفوفة و الصفوف و الأعمدة.


الصفوف تأتي بشكل اُفقي و الأعمدة تأتي بشكل عمودي حيث يرمز للصفوف بالحرف M و لعدد الأعمدة يرمز لها N, من أهم الأشياء الذي يجب أن نعرفها في المصفوفة ذات بعدين بأن لكل مصفوفة عنوان و كل عنوان يتكون من مقطعين, المقطع الأول نسميه "i" و المقطع الثاني نسميه "j" و هذه التسمية ليست ثابتة أو إجبارية و إنما شائعة, حيث الخلية في الجدول السابق 0,0 نلاحظ أنها مكونة من مقطعين الأول "i" و الثاني "j" و هكذا.

من خلال الجدول السابق بأن الصف 0,0 و 0,1 و 0,2 و 0,3 نلاحظ من ذلك بأن الجزء "i" ثابت و هو 0 و الجزء "j" هو الذي يزداد, و إذا نظرنا لها بشكل عمودي نلاحظ بأن "i" هو الذي يزداد و "j" هو ثابت.

نلاحظ ايضاً بأن المصفوفة لها قطرين القطر الرئيسي باللون البرتقالي ننظر إليه من اليسار لليمين و القطر الثانوي باللون الأصفر ننظر إليه من اليمين لليسار و هذا الجدول كان مثال بسيط لكيفية التعامل مع مصفوفة و عناوين خلايا المصفوفة ذات بعدين, و إذا نظرنا في القطر الرئيسي نجد بأن "i" تتساوى مع "j" و إذا جئنا للقطر الثانوي نجد أن العلاقة بين "i" و "j" أنه عندما نجمعهم مع بعض ستكون النتيجة تساوي حجم المصفوفة ناقص 1 حيث إذا جمعنا مثلاً 0+3 يساوي 3 و هكذا لجميع العناصر بداخل الخلية.


الشكل العام لتعريف المصفوفة

type[][]Array_name=new Type[m][n]

 

حيث أن type نوع المصفوفة و نفتح مربعين [][] ثم إسم المصفوفة إختياري ثم يساوي new و هي إستنساخ أو إنشاء مصفوفة بداخل الذاكرة بواسطة كلمة new ثم نكتب نوع المصفوفة و نعطيها الأحجام M و N.

 

مثال 1

package javaapplication22;
public class JavaApplication22 {
    public static void main(String[] args) {
        int [][]a=new int[4][4];
        a[0][2]=19;
        a[1][3]=25;
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a.length;j++)
                System.out.print(a[i][j]);
            System.out.println();
        }
    }
}

 


شرح المثال السابق 1

في البداية قلنا له خزّن لنا القيمة 19 في الخلاية 0 و 2 و القيمة 25 في الخلاية 1 و 3 ثم ادخلناه في حلقة لوب نوع for للـ i و حلقة لوب ثانية للـ j و إستخدمنا بالبداية print من أجل الطباعة على الصف نفسه و لا نريد النزول لسطر آخر لأنها مصفوفة ذات بعدين و نريد طباعتها على شكل مربع و ليست مصفوفة على بعد واحد.

 

مثال 2

انشئ مصفوفة ذات بعدين تستقبل قيم من لوحة مفاتيح المستخدم و تخزينها داخل المصفوفة و طباعتها بشكل مرتب بحجم 4*4 .

package javaapplication22;
import java.utl.Scanner;
public class JavaApplication22 {
    public static void main(String[] args) {
        Scanner n=new Scanner(System.in);
        int [][]a=new int[4][4];
        int i,j;
        for(i=0;i<a.length;i++)
        {
            for(j=0;j<a.length;j++)
                a[i][j]=n.nextInt();
        }
        for(i=0;i<a.length;i++)
        {
            for(j=0;j<a.length;j++)
                System.out.print(a[i][j]);
            System.out.println();
        }
    }
}


شرح المثال السابق 2

في البداية ضمننا حزمة الإدخال java.util.Scanner و دخلنا للبرنامج الرئيسي و عرّفنا كائن مشتق من كلاس حزمة الإدخال و عرفّنا مصفوفة 4 في 4 و دخلنا في حلقتين لوب في جزء الإدخال و حلقتين لوب في جزء طباعة عناصر المصفوفة.


طباعة عناصر القطر الرئيسي

إذا طُلِبَ منّا طباعة عناصر القطر الرئيسي فقط ما هي الآلية التي سنستخدمها للتعامل مع المصفوفة ذات بعدين حتى نستطيع طباعه عناصر القطر الرئيسي؟

ذكرنا قبل قليل ببداية الدرس بأن عناصر القطر الرئيسي الذي كانت مضللة باللون البرتقالي و قلنا أن العلاقة بالقطر الرئيسي هي "i" تساوي "j" إذا أردنا طباعة عناصره.

هنا نكون قد استنتجنا شرط و هو نقوم فقط بكتابة شرط واحد عند طباعة عناصر المصفوفة و هو عندما تكون "i" تساوي "j" إطبع هذه العناصر حتى نتمكن من طباعة القطر الرئيسي فقط.


مثال 3

إطبع عناصر القطر الرئيسي فقط من مصفوفة ذات بعدين 4*4.

package javaapplication22;
import java.utl.Scanner;
public class JavaApplication22 {
    public static void main(String[] args) {
        Scanner n=new Scanner(System.in);
        int [][]a=new int[4][4];
        int i,j;

        for(i=0;i<a.length;i++)
        {
            for(j=0;j<a.length;j++)
                a[i][j]=n.nextInt();
        }

        for(i=0;i<a.length;i++)
        {
            for(j=0;j<a.length;j++)
                System.out.print(a[i][j]+ " ");
            System.out.println();
        }
       
        for(i=0;i<a.length;i++)
        {
            for(j=0;j<a.length;j++)
                if(i==j)
                System.out.print(a[i][j])+ " ";
            System.out.println();
        }

    }
}

 

 

شرح المثال السابق 3

بنفس شرح المثال السابق 2 فقط إضفنا له لوب آخر و هو طباعة عناصر القطر الرئيسي فقط و كان الشرط هو إذا "i" تساوي "j" قم بتنفيذ الأوامر.

لمشاهدة القسم الأول من الدرس فيديو لفهم هذا النوع اكثر إضغط على تشغيل هذا الفيديو



google-playkhamsatmostaqltradent