→ חזרו אחורה

פרק 8 - מערך דו-ממדי

⏱ 14 דקות קריאה

עד עכשיו המערכים שלנו היו "שורה" אחת של תאים. אבל לפעמים המידע מסודר כמו טבלה - שורות ועמודות, כמו לוח שחמט, גיליון ציונים, או תמונה. בשביל זה יש מערך דו-ממדי (2D Array).

1. מהו מערך דו-ממדי?

מערך דו-ממדי הוא בעצם מערך של מערכים: כל תא במערך החיצוני הוא בעצמו מערך שלם - שורה שלמה. כדי לגשת לאיבר, נצטרך שני אינדקסים: אחד לשורה ואחד לעמודה.

2. יצירת מערך דו-ממדי

Java

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

יצרנו מטריצה בגודל 3 שורות על 3 עמודות (3x3).

כל זוג { } פנימי הוא שורה אחת שלמה.

3. גישה לאיבר: שורה ועמודה

Java

System.out.println(grid[0][0]);
System.out.println(grid[1][2]);
            

grid[0][0] - שורה 0, עמודה 0: האיבר 1.

grid[1][2] - שורה 1 (השנייה), עמודה 2 (השלישית): האיבר 6.

שימו לב לסדר: תמיד [שורה][עמודה], ולא הפוך.

4. מעבר על כל התאים: לולאות מקוננות

כדי לבקר בכל תא במטריצה, נשתמש בשתי לולאות מקוננות שלמדנו בפרק הלולאות - הלולאה החיצונית עוברת על השורות, והפנימית עוברת על העמודות בתוך כל שורה.

Java

for (int row = 0; row < grid.length; row++) {
    for (int col = 0; col < grid[row].length; col++) {
        System.out.print(grid[row][col] + " ");
    }
    System.out.println();
}
            

grid.length - מספר השורות במטריצה.

grid[row].length - מספר העמודות בשורה הנוכחית (כי כל שורה היא מערך בפני עצמו).

5. תבנית: סכום כל התאים

אותה תבנית "צובר" שהכרנו במערך חד-ממדי עובדת גם כאן - רק בתוך שתי לולאות מקוננות:

Java

int sum = 0;

for (int row = 0; row < grid.length; row++) {
    for (int col = 0; col < grid[row].length; col++) {
        sum = sum + grid[row][col];
    }
}

System.out.println("סכום כל התאים: " + sum);
            

6. טעויות נפוצות

החלפה בין שורה לעמודה: לכתוב grid[col][row] במקום grid[row][col] - קל להתבלבל.

שימוש ב-grid.length לעמודות: grid.length נותן את מספר השורות בלבד - למספר העמודות צריך grid[row].length.

לולאה פנימית שגויה: שכחה לעדכן את הלולאה הפנימית כך שתעבור רק על התאים של השורה הנוכחית.

🎓 זווית הבגרות

איך זה מופיע בבגרות: חשוב לדעת - מערך דו-ממדי מסומן במפורש כ"מחוץ לתכנית הלימודים" (X) במיקוד הבגרות הנוכחי, גם ל-899371 וגם ל-899271. הנושא לא אמור להופיע בשאלות המבחן בפועל בשנה הנוכחית.

סוג שאלה טיפוסי: אין - זה לא נושא נבחן כרגע. הפרק כאן כהעשרה ובסיס להבנת מבני נתונים מתקדמים יותר.

טעות נפוצה: להניח שכל נושא שמופיע בחומר הלימוד בהכרח נבחן - תמיד כדאי לבדוק את מסמך המיקוד העדכני לשנה שלכם, לא רק את חומר הלימוד הכללי.

מה לזכור למבחן: אל תשקיעו זמן הכנה יקר בנושא הזה על חשבון מערכים חד-ממדיים, לולאות ומתודות - אלה כן נבחנים בוודאות.

7. תרגול

מה יודפס למסך על ידי הקוד הבא?

Java
int[][] grid = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
System.out.println(grid[2][1]);

כתבו קוד שמדפיס את האיבר בשורה 2 ועמודה 1 במטריצה grid.

כתבו את שורת הכותרת של הלולאה החיצונית שעוברת על כל השורות של grid.

בתוך הלולאות המקוננות, כתבו את שורת הקוד שמוסיפה את grid[row][col] לצובר sum.

פרק 7 - מחרוזות פרק 9 - מבוא למחלקות ועצמים