המשימה
נתונה שרשרת ההורשה A → B → C (B יורשת מ-A, ו-C יורשת מ-B).
נתון מערך מטיפוס A שמכיל עצמים משלושת הטיפוסים.
כתוב פעולה חיצונית שמדפיסה שלוש שורות — כמה איברים במערך הם
**בדיוק** מטיפוס A, כמה בדיוק B, וכמה בדיוק C, בסדר הזה.
**עצם מטיפוס C לא ייספר כ-B, ולא כ-A.**
הנחיות:
• זו המלכודת: הבדיקה `x instanceof B` מחזירה true גם עבור עצם
מטיפוס C, כי C הוא סוג של B. אותו דבר עם `is` ב-C#.
• לכן הבדיקות חייבות להיות בשרשרת if-else שמתחילה מהטיפוס
**הספציפי ביותר** ויורדת כלפי מעלה: קודם C, אחר כך B, ולבסוף A.
ברגע שאחת התאימה, השאר לא נבדקות.
• שרשרת של if-ים נפרדים במקום if-else תספור כל עצם C שלוש פעמים.
• נסה בכוונה את הסדר ההפוך ותראה מה מתקבל — זו הדרך הטובה ביותר
להבין את התרגיל.
```ds:table
{"title":"המערך שבדוגמה — שבעה איברים","rows":[["אינדקס","0","1","2","3","4","5","6"],["טיפוס","A","C","B","C","A","B","C"]]}
```
```ds:table
{"title":"הפלט הצפוי","rows":[["טיפוס","כמות"],["A בדיוק","2"],["B בדיוק","2"],["C בדיוק","3"]]}
```
קוד הפתיחה
class A {
public String label() { return "A"; }
}
class B extends A {
@Override
public String label() { return "B"; }
}
class C extends B {
@Override
public String label() { return "C"; }
}
public class Main {
/** מדפיסה שלוש שורות: כמה בדיוק A, כמה בדיוק B, כמה בדיוק C. */
public static void countTypes(A[] arr) {
// כתוב את הפתרון כאן — שים לב לסדר הבדיקות
}
public static void main(String[] args) {
A[] arr = { new A(), new C(), new B(), new C(), new A(), new B(), new C() };
countTypes(arr); // 2 ואז 2 ואז 3
System.out.println("---");
countTypes(new A[]{}); // 0 ואז 0 ואז 0
System.out.println("---");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].label());
}
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.