פרק 8 - מערך דו-ממדי
עד עכשיו המערכים שלנו היו "שורה" אחת של תאים. אבל לפעמים המידע מסודר כמו טבלה - שורות ועמודות, כמו לוח שחמט, גיליון ציונים, או תמונה. בשביל זה יש מערך דו-ממדי (2D Array).
1. מהו מערך דו-ממדי?
מערך דו-ממדי הוא בעצם מערך של מערכים: כל תא במערך החיצוני הוא בעצמו מערך שלם - שורה שלמה. כדי לגשת לאיבר, נצטרך שני אינדקסים: אחד לשורה ואחד לעמודה.
2. יצירת מערך דו-ממדי
int[][] grid = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
יצרנו מטריצה בגודל 3 שורות על 3 עמודות (3x3).
כל זוג { } פנימי הוא שורה אחת שלמה.
3. גישה לאיבר: שורה ועמודה
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. מעבר על כל התאים: לולאות מקוננות
כדי לבקר בכל תא במטריצה, נשתמש בשתי לולאות מקוננות שלמדנו בפרק הלולאות - הלולאה החיצונית עוברת על השורות, והפנימית עוברת על העמודות בתוך כל שורה.
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. תבנית: סכום כל התאים
אותה תבנית "צובר" שהכרנו במערך חד-ממדי עובדת גם כאן - רק בתוך שתי לולאות מקוננות:
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. תרגול
מה יודפס למסך על ידי הקוד הבא?
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.