תרגול מדעי המחשב

ספירת טיפוסים במערך פולימורפי

מאתגר Java

המשימה

נתונה שרשרת ההורשה 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 ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון — כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות בדיקה חיצוני.