סיור במערכות
הוצג| English | משמעות |
|---|---|
| traversal/træˈvɜːsl/ | מעבר על המבנה |
| enhanced for loop/enˈhænst fɔː luːp/ | לולאת for משודרגת |
ביקור בכל אלמנט
- טיול (Traversal) מבקר בכל אלמנט של המערך, בדרך כלל בסדר.
- המחזור האינדקסי הסטנדרטי:
for (int i = 0; i < a.length; i++) { ... a[i] ... } iעובר מ-0ל-length - 1, כך ש-a[i]מגיע לכל אלמנט פעם אחת.- טיול הוא הבסיס לכל אלגוריתם מערך.
מחזור for-each
- ה-for loop המשופר (for-each) for מבקר בערך כל אחד ללא אינדקס:
for (int x : a) { ... x ... }—xעובר על כל אלמנט בנפרד.- נקי יותר כאשר אתם זקוקים רק ל-ערכים, ולא למיקומיהם.
- אך הוא אינו יכול לשנות את המערך או להשתמש באינדקס.
אינדקסי מול for-each
- השתמשו בלולאת אינדקסי כאשר אתם זקוקים למיקום
i, או כדי לשנות אלמנטים. - השתמשו בלולאת for-each כאשר אתם זקוקים רק לקריאה של כל ערך.
a[i] = 0;דורש לולאת אינדקס; חיבור ערכים יכול להשתמש ב-for-each.- שתי הלולאות מבקרות בכל אלמנט — בחרו את זו המתאימה למשימה.
גבולות שוב
- התנאי של לולאת האינדקס
i < a.lengthשמר עלiתקף. i <= a.lengthחורג בגודל של אחד → ArrayIndexOutOfBoundsException.- לולאת for-each לא יכולה לצאת מגבולות — היא מטפלת בטווח עבורכם.
- כאשר אתם כותבים את האינדקס בעצמכם, אתם אחראים על הגבולות.
לולאת for-each קורא ערכים אך אינה יכולה להחזיר אותם לתוך המערך. for (int x : a) { x = 0; } משנה רק העתק מקומי x, לא a — כדי לאפס את המערך אתם זקוקים ללולאת האינדקס a[i] = 0;. השתמשו ב-for-each לקריאה, ולולאת האינדקס לשינוי או כאשר אתם זקוקים למיקום i.
שתי דרכים לחבר מערך:
- אינדקסי:
for (int i = 0; i < a.length; i++) { sum += a[i]; } - For-each:
for (int x : a) { sum += x; } - שתי הדרכים נותנות אותו סכום; for-each נקי יותר כאשר האינדקס אינו נדרש.
עיבור (traversal) מבקר בכל אלמנט. לולאת האינדקס (for (int i = 0; i < a.length; i++)) מספקת את המיקום i ויכולה לשנות a[i]; לולאת for-each (for (int x : a)) קוראת כל ערך בצורה נקייה אך אינה יכולה לשנות את המערך או להשתמש באינדקס. בחרו בהתאם אם אתם זקוקים לאינדקס או לשינוי.
סיור במערכת כדי לחשב את סכומה
i מבקר בכל אינדקס; sum מצטבר עם a[i] (כאן a = {10,20,30}).
התנאי הנכון לסיור במערכת a באמצעות אינדקס הוא...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
האינדקסים תקפים הם 0..length-1, ולכן i < a.length.
איזה לולאה יש להשתמש אם צריך לשנות את ערכי המערכת?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לולאת for-each לא יכולה לבצע השבה; יש להשתמש ב- a[i] = ... עם לולאת האינדקס.
בתוך for (int x : a) { x = 0; }, המערכת a מוגדרת ככולה אפסים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
x היא העתק מקומי; המערכת נשארת ללא שינוי.
לולאת for-each for (int x : a) היא הטובה ביותר כאשר צריך רק...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לולאת for-each קוראת ערכים בצורה נקייה ללא אינדקס.
ביקור בכל אלמנט של מערך נקרא ___ (מילה אחת).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מעבר (traversal) מבקר בכל אלמנט.