📊 المصفوفات متعددة الأبعاد في جافا: تنظيم البيانات في جداول ومخططات
مرحباً بك في درس جديد! 🎯 تخيل أنك تريد تخزين درجات طلاب في فصل ما. لديك 5 طلاب، وكل طالب لديه 3 درجات في مواد مختلفة. كيف يمكنك تنظيم هذه البيانات؟ المصفوفة العادية (ذات البعد الواحد) قد لا تكون مناسبة هنا. لحل هذه المشكلة، تقدم لنا جافا المصفوفات متعددة الأبعاد، وأبسطها وأكثرها استخداماً هي المصفوفات ثنائية الأبعاد (2D Arrays)، والتي يمكن تخيلها كجدول من الصفوف والأعمدة. هيا نتعلم كيفية استخدامها! 📈
🔍 ما هي المصفوفة ثنائية الأبعاد؟
المصفوفة ثنائية الأبعاد هي ببساطة مصفوفة داخل مصفوفة. فبدلاً من أن يكون كل عنصر فيها قيمة واحدة (مثل int أو String)، يكون كل عنصر مصفوفة أخرى.
- يمكنك تخيلها كـ جدول يحتوي على صفوف (Rows) و أعمدة (Columns).
- للإشارة إلى عنصر معين، نحتاج إلى مؤشرين (Indexes): الأول للصف، والثاني للعمود.
- مثال من الحياة: جدول البيانات في Excel هو نموذج عملي للمصفوفة ثنائية الأبعاد.
✍️ طريقة تعريف المصفوفة ثنائية الأبعاد
يتم تعريف المصفوفة ثنائية الأبعاد في جافا باستخدام زوجين من الأقواس المربعة [][].
الصيغة العامة:
Date_type[][] array_name;
أو
Date_type array_name[][]; // صيغة أقل شيوعاً
أمثلة على التعريف:
int[][] grades; // مصفوفة ثنائية الأبعاد لتخزين أعداد صحيحة (كالدرجات)
String[][] chessBoard; // مصفوفة ثنائية الأبعاد لتخزين نصوص (كرموز قطع الشطرنج)
double[][] coordinates; // مصفوفة ثنائية الأبعاد لتخزين أعداد عشرية (كإحداثيات)
🏗️ طرق تهيئة المصفوفة ثنائية الأبعاد
بعد التعريف، يجب تهيئة المصفوفة قبل استخدامها، تماماً مثل المصفوفة العادية.
الطريقة الأولى: التهيئة المباشرة مع القيم
هنا ننشئ المصفوفة ونعطيها قيمها الأولية مباشرة.
int[][] matrix = {
{1, 2, 3}, // الصف الأول: عناصر العمود 0،1،2
{4, 5, 6}, // الصف الثاني
{7, 8, 9} // الصف الثالث
};
في هذا المثال، أنشأنا جدولاً (مصفوفة) مكوناً من 3 صفوف و 3 أعمدة. القيمة 5 تقع في الصف الثاني (Index = 1) و العمود الثاني (Index = 1).
الطريقة الثانية: التهيئة باستخدام الكلمة new
نحدد حجم المصفوفة أولاً (عدد الصفوف والأعمدة)، ثم نملأ القيم لاحقاً.
// إنشاء مصفوفة من 2 صف و 3 أعمدة، جميع قيمها الصفرية في البداية
int[][] table = new int[2][3];
// إنشاء مصفوفة لتخزين أسماء 4 طلاب وكل طالب له مادتان
String[][] studentCourses = new String[4][2];
📍 كيفية الوصول إلى عناصر المصفوفة وتعديلها
للوصول إلى عنصر محدد، نستخدم اسم المصفوفة متبوعاً بمؤشري الصف والعمود بين أقواس مربعة.
الصيغة:
array_name[row_index][column_index]
تذكر: المؤشرات تبدأ من الصفر 0!
مثال عملي:
int[][] scores = {
{85, 90, 78},
{92, 88, 95}
};
// الوصول إلى قيمة عنصر محدد
int firstStudentSecondScore = scores[0][1]; // ستكون القيمة 90
System.out.println(firstStudentSecondScore); // يطبع: 90
// تعديل قيمة عنصر محدد
scores[1][0] = 96; // تغيير درجة الطالب الثاني في المادة الأولى من 92 إلى 96
System.out.println(scores[1][0]); // يطبع: 96
🔁 كيفية المرور على جميع عناصر المصفوفة (التكرار)
لطباعة أو معالجة جميع عناصر المصفوفة ثنائية الأبعاد، نحتاج إلى حلقتين تكرار متداخلتين (Nested Loops).
- الحلقة الخارجية تمر على الصفوف.
- الحلقة الداخلية تمر على الأعمدة داخل كل صف.
مثال: طباعة جميع عناصر مصفوفة بشكل جدولي
char[][] board = {
{'X', 'O', 'X'},
{'O', 'X', 'O'},
{'X', 'O', 'X'}
};
for (int row = 0; row < 3; row++) { // حلقة الصفوف
for (int col = 0; col < 3; col++) { // حلقة الأعمدة داخل كل صف
System.out.print(board[row][col] + " ");
}
System.out.println(); // ننتقل لسطر جديد بعد كل صف
}
مخرج الكود:
X O X
O X O
X O X
💡 مثال تطبيقي شامل: تخزين وعرض درجات الطلاب
لنطبق كل ما تعلمناه في مثال واقعي بسيط:
public class StudentGrades {
public static void main(String[] args) {
// مصفوفة ثنائية الأبعاد: 3 طلاب، لكل طالب درجتين
int[][] grades = {
{85, 90}, // درجات الطالب الأول
{78, 88}, // درجات الطالب الثاني
{92, 95} // درجات الطالب الثالث
};
// حساب متوسط درجة كل طالب
for (int student = 0; student < grades.length; student++) {
int sum = 0;
for (int subject = 0; subject < grades[student].length; subject++) {
sum += grades[student][subject];
}
double average = (double) sum / grades[student].length;
System.out.println("متوسط درجة الطالب " + (student+1) + " هو: " + average);
}
}
}
🧠 ملخص الدرس
- المصفوفة ثنائية الأبعاد هي جدول بيانات من صفوف وأعمدة. 📐
- نعرفها باستخدام
Date_type[][] array_name;. - نهيئها إما مباشرة
{{values},{values}}أو باستخدامnew Date_type[number_of_rows][number_of_columns]. 🏗️ - نصل للعناصر باستخدام مؤشرين:
array_name[row_index][column_index]. - نمر على جميع عناصرها باستخدام حلقتين
forمتداخلتين. 🔄 - هي أداة قوية لتنظيم البيانات المرتبطة ببعضها، مثل درجات الطلاب أو لوحات الألعاب.
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال