في Java، المصفوفات وسيلة لتخزين عدة قيم من النوع نفسه في بنية واحدة. على عكس بنى البيانات الأخرى، يكون حجم المصفوفة ثابتًا بمجرد إنشائها. يمكن إسناد العناصر إلى المصفوفة أو استرجاعها منها باستخدام فهرس. تستخدم مصفوفات Java فهرسة تبدأ من الصفر: فهرس العنصر الأول هو 0، وفهرس العنصر الثاني هو 1، وهكذا.
إليك الصيغة القياسية لتهيئة مصفوفة:
type[] variableName = new type[size];
type هو نوع العناصر في المصفوفة، وقد يكون نوعًا بدائيًا (مثل int) أو صنفًا (مثل String).
size هو عدد العناصر التي ستضمها هذه المصفوفة (وهو لا يمكن تغييره لاحقًا).
بعد إنشاء المصفوفة، تُهيَّأ العناصر إلى قيمها الافتراضية (عادةً 0 أو false أو null).
// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];
يمكن أيضًا تعريف المصفوفات باستخدام صيغة مختصرة تتيح لك إنشاء المصفوفة وتحديد قيمها معًا:
// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };
بما أن المترجم يمكنه الآن معرفة عدد العناصر التي ستضمها المصفوفة، يمكن حذف الطول.
يمكن إسناد عناصر المصفوفة والوصول إليها باستخدام تدوين الفهرس بين الأقواس المربعة:
// Assign second element by index
twoInts[1] = 8;
// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];
الوصول إلى فهرس خارج الفهارس الصالحة للمصفوفة يؤدي إلى IndexOutOfBoundsException.
يمكن التعامل مع المصفوفات إما باستدعاء طُرق نسخة المصفوفة أو خصائصها، أو باستخدام الطرق الساكنة المعرّفة في صنف Arrays (والتي تُستخدم عادةً في الكود العام فقط).
تحمل خاصية length طول المصفوفة.
يمكن الوصول إليها هكذا:
int arrayLength = someArray.length;
توفر Java أيضًا صنف أدوات مفيدًا هو java.util.Arrays يحتوي على الكثير من الطرق المفيدة المتعلقة بالمصفوفات (مثل Arrays.equals).
تدعم Java أيضًا المصفوفات متعددة الأبعاد مثل int[][] arr = new int[3][4];، والتي قد تكون مفيدة جدًا.
كون المصفوفة أيضًا مجموعة يعني أنه، إلى جانب الوصول إلى القيم عبر الفهرس، يمكنك المرور على كل قيمها باستخدام حلقة for-each:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for(char vowel: vowels) {
// Output the vowel
System.out.print(vowel);
}
// => aeiou
إذا أردت مزيدًا من التحكم في القيم التي تمر عليها، يمكنك استخدام for حلقة:
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
for (int i = 0; i < 3; i++) {
// Output the vowel
System.out.print(vowels[i]);
}
// => aei
أنت مراقب طيور شغوف تتابع عدد الطيور التي زارت حديقتك خلال الأيام السبعة الماضية.
لديك ست مهام، وكلها تتعلق بأعداد الطيور التي زارت حديقتك.
لأغراض المقارنة، تحتفظ دائمًا بنسخة من أعداد الأسبوع الماضي في متناول يدك، وهي: 0، 2، 5، 3، 7، 8 و4. نفّذ الطريقة BirdWatcher.getLastWeek() التي تُرجع أعداد الأسبوع الماضي:
BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]
نفّذ الطريقة BirdWatcher.getToday() لتُرجع عدد الطيور التي زارت حديقتك اليوم. أعداد الطيور مرتبة حسب اليوم، حيث يكون العنصر الأول عدد أقدم يوم، والعنصر الأخير عدد اليوم.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1
نفّذ الطريقة BirdWatcher.incrementTodaysCount() لزيادة عدد اليوم:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2
نفّذ الطريقة BirdWatcher.hasDayWithoutBirds() التي تُرجع true إذا كان هناك يوم لم تزر فيه أي طيور الحديقة؛ وإلا فأرجع false:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true
نفّذ الطريقة BirdWatcher.getCountForFirstDays() التي تُرجع عدد الطيور التي زارت حديقتك منذ بداية الأسبوع، لكن مع حصر العدد في عدد الأيام المحدد من بداية الأسبوع.
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14
بعض الأيام أكثر ازدحامًا من غيرها. واليوم المزدحم هو الذي زارت فيه خمس طيور أو أكثر حديقتك.
نفّذ الطريقة BirdWatcher.getBusyDays() لتُرجع عدد الأيام المزدحمة:
int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.