Java/מערכים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
שורה 91:
}
</pre></div>
כמו שניתן לראות, בצורה מקבילה ללולאות בהן משתמשים עם מערכים חד -מימדיים, במערך דו מימדי נוח להשתמש בשתי לולאות, אחת בתוך השנייה.
 
====מערכים לא אחידים ומערכים רב מימדיים====
הדרך שראינו קודם להכריז על מערך דו-מימדי היא הפשוטה ביותר, אך איננה הדרך היחידה לעשות זאת. נראה דרכים נוספות:
<div style="text-align:left; direction:ltr;"><pre>
String[][] music = {{"Album 1", "Song", "Another song"},
{"Album 2", "First Song", "Second song"}};,
{"Album 3", "First Song", "Second song", "Third song"},
{"Album 4"}};
</pre></div>
כאן נוצר מערך בגודל שנקבע לפי המשתנים אותם הכנסנו אליו. מערך זה אינו בהכרח ריבועי - מספר האיברים בכל מערך חד-מימדי הוא שונה. כמו במערכים חד מימדיים שנוצרים בדרך זו, גם במערכים דו-מימדיים ניתן ליצור מערך בצורה כזו רק בעת איתחולו. שימו לב כי כל מערך חד-מימדי נכתב בתוך זוג צומדיים נפרדים, המופרדים בפסיק.
הדרך האחרונה ממחישה בצורה הטובה ביותר את היותו של המערך הדו-מימדי מבנה המורכב ממערכים חד מימדיים. נאתחל את המערך, ואז נאתחל כל מערך חד-מימדי בתוכו, בצורה הבאה. אתחול:
{{קוד|<nowiki>String[][] music = new String[5][];</nowiki>}}
כעת מאתחלים את תתי המערכים שבתוכו. נאתחל את הראשון:
{{קוד|<nowiki>music[0] = new String[13];</nowiki>}}
את השני:
{{קוד|<nowiki>music[0] = new String[13];</nowiki>}}
וכנהוג במערכים, נוח הרבה יותר לעשות זאת בעזרת לולאה:
<div style="text-align:left; direction:ltr;"><pre>
for(int i=0; i<5; i++)
music[i] = new String[13];
</pre></div>
חשוב - גישה למערך שהוכרז אך לא אותחל תביא לתקלת זמן ריצה (ולקריסת התוכנית) - יש לשים לב ולהימנע מטעויות כאלה.
 
====עבודה עם מערכים לא אחידים====
כאשר משתמשים במערכים שאינם אחדים בגודלם, קשה עד בלתי אפשרי להשתמש בלולאות כמו שראינו עד כה. לכן, כדאי להשתמש באפשרות length, שמאפשרת לדעת את גודל המערך. גודלו של מערך בשם arr יינתן לנו על ידי הפקודה {{קוד בשורה|arr.length}}. שתי הערות:
* בניגוד לאפשרות דומה שקיימת עם משתנים מטיפוס String, כאן אין צורך בסוגריים.
* הנתון שמוחזר הוא מספר שלם, ששווה לגודל המערך. יש לזכור שמיספור איברי המערך מתחיל ב-0, ולכן האינקדס של האיבר האחרון אינו גודל המערך, אלא גודל המערך פחות אחד.
נראה דוגמה לשימוש ב-length:
<div style="text-align:left; direction:ltr;"><pre>
for(int i=0; i<music.length; i++) {
for(int j=0; j<music[i].length; j++) {
System.out.print(music[i][j]+"\t");
}
System.out.println();
}
</pre></div>
זוהי דוגמה כמעט זהה לזו שכבר ראינו, שמדפיסה את כל איברי המערך הדו-מימדי music, אך כאן ניתן להדפיס (כמעט) בבטחה את המערך גם אם איננו יודעים בוודאות את הגדלים. נזכיר אם הכרזנו על מערך ולא אתחלנו אותו - התוכנית תקרוס.
 
====מערכים רב-מימדיים====
מערכים רב-מימדיים עובדים כמו שראינו, אך עם מספר מימדים גדול יותר. כך נכריז על מערך ארבע-מימדי:
{{קוד|<nowiki>int arr[][][][] = new int[10][9][8][7];</nowiki>}}
גם הגישה לאיברי מערך כזה היא כפי שקל לצפות:
{{קוד|<nowiki>arr[0][0][0][0] = 1;</nowiki>}}
בדרך כלל אין צורך להשתמש במערכים בעלי יותר משני מימדים, לכן לא נרחיב עוד בנושא.