المصفوفات

المصفوفات (Arrays) تخزين مجموعات من البيانات من نفس النوع. في هذا الدرس، سنتعلم كيفية استخدام المصفوفات في Java.

إنشاء المصفوفة

الطريقة 1: إنشاء مع قيم

JAVA
int[] numbers = {1, 2, 3, 4, 5};
String[] names = {"أحمد", "محمد", "علي"};

الطريقة 2: إنشاء بحجم محدد

JAVA
int[] numbers = new int[5];  // مصفوفة بحجم 5 (قيم افتراضية: 0)
String[] names = new String[3];  // مصفوفة بحجم 3 (قيم افتراضية: null)

الطريقة 3: إنشاء مع القيم لاحقًا

JAVA
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

الوصول إلى العناصر

JAVA
String[] fruits = {"تفاح", "موز", "برتقال"};

// الوصول إلى العنصر الأول
System.out.println(fruits[0]);  // "تفاح"

// الوصول إلى العنصر الأخير
System.out.println(fruits[2]);  // "برتقال"

// طول المصفوفة
System.out.println(fruits.length);  // 3

⚠️ خطأ شائع: IndexOutOfBoundsException

JAVA
int[] numbers = {1, 2, 3};
// System.out.println(numbers[3]);  // ❌ خطأ: الفهرس 3 غير موجود
System.out.println(numbers[2]);     // ✅ صحيح: آخر عنصر

تعديل العناصر

JAVA
int[] numbers = {1, 2, 3, 4, 5};

numbers[0] = 10;  // تغيير العنصر الأول
numbers[4] = 50;  // تغيير العنصر الأخير

System.out.println(Arrays.toString(numbers));  // [10, 2, 3, 4, 50]

المرور على المصفوفة

باستخدام for

JAVA
int[] numbers = {10, 20, 30, 40, 50};

for (int i = 0; i < numbers.length; i++) {
    System.out.println("numbers[" + i + "] = " + numbers[i]);
}

باستخدام for-each (مُحسَّن)

JAVA
int[] numbers = {10, 20, 30, 40, 50};

for (int number : numbers) {
    System.out.println(number);
}

باستخدام while

JAVA
int[] numbers = {10, 20, 30, 40, 50};
int i = 0;

while (i < numbers.length) {
    System.out.println(numbers[i]);
    i++;
}

عمليات شائعة على المصفوفات

البحث عن عنصر

JAVA
int[] numbers = {10, 20, 30, 40, 50};
int target = 30;
int index = -1;

for (int i = 0; i < numbers.length; i++) {
    if (numbers[i] == target) {
        index = i;
        break;
    }
}

if (index != -1) {
    System.out.println("تم العثور على العنصر في الفهرس: " + index);
} else {
    System.out.println("العنصر غير موجود");
}

إيجاد القيمة القصوى

JAVA
int[] numbers = {10, 50, 30, 20, 40};
int max = numbers[0];

for (int number : numbers) {
    if (number > max) {
        max = number;
    }
}

System.out.println("القيمة القصوى: " + max);  // 50

حساب المتوسط

JAVA
int[] numbers = {10, 20, 30, 40, 50};
int sum = 0;

for (int number : numbers) {
    sum += number;
}

double average = (double) sum / numbers.length;
System.out.println("المتوسط: " + average);  // 30.0

ترتيب المصفوفة

باستخدام Arrays.sort()

JAVA
import java.util.Arrays;

int[] numbers = {50, 20, 40, 10, 30};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));  // [10, 20, 30, 40, 50]

ترتيب يدوي (Bubble Sort)

JAVA
int[] numbers = {50, 20, 40, 10, 30};

for (int i = 0; i < numbers.length - 1; i++) {
    for (int j = 0; j < numbers.length - i - 1; j++) {
        if (numbers[j] > numbers[j + 1]) {
            int temp = numbers[j];
            numbers[j] = numbers[j + 1];
            numbers[j + 1] = temp;
        }
    }
}

System.out.println(Arrays.toString(numbers));  // [10, 20, 30, 40, 50]

المصفوفات المتعددة الأبعاد

مصفوفة ثنائية الأبعاد (جدول)

JAVA
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// الوصول إلى عنصر
System.out.println(matrix[1][2]);  // 6 (صف 1، عمود 2)

// المرور على المصفوفة
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

إنشاء مصفوفة ديناميكية

JAVA
int[][] matrix = new int[3][4];  // 3 صفوف، 4 أعمدة

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        matrix[i][j] = i * matrix[i].length + j + 1;
    }
}

❓ أسئلة شائعة

س لماذا تبدأ المصفوفات من 0 وليس 1؟
ج هذا تصميم تاريخي في لغات البرمجة. الفهرس يمثل الإزاحة من بداية المصفوفة.
س هل يمكن تغيير حجم المصفوفة بعد الإنشاء؟
ج لا، حجم المصفوفة ثابت بعد الإنشاء. استخدم ArrayList للمصفوفات الديناميكية.
س ما الفرق بين length و length()؟
ج length هو خاصية للمصفوفات. length() هو دالة للنصوص (String).

📖 ملخص

📝 تمارين

  1. مصفوفة أرقام: أنشئ مصفوفة من 10 أرقام واحسب المجموع والمتوسط
  2. البحث: اكتب دالة تبحث عن عنصر في مصفوفة وتعيد فهرسه
  3. مصفوفة ثنائية: أنشئ مصفوفة 3×3 واملأها بأرقام عشوائية

الدرس التالي

في الدرس التالي، سنتعلم ممارسة أساسيات Java — تطبيقات عملية.

100%